プロが教えるわが家の防犯対策術!

C言語において、
配列要素をひとつずつ前にずらすコードはどのように書いたらいいのでしょうか?
例えば
a[10] = {14,32,96,74,32,26,88,49,20,13};

a[10]={32,96,74,32,26,88,49,20,13,14}
にするような。
ご教授ください。

教えて!goo グレード

A 回答 (4件)

メモリ編集する方法とは別解として



int getA(int i){
return i < 9? a[i+1]: a[0];
}
// getA(0) == a[1]
// getA(9) == a[0]
    • good
    • 0

コピー元とコピー先が重なっているときの動作は memcpy() では未定義ですが、memmove() では正しくコピー(つまり移動)が行われます。



だぞうです。
私の書き込んだmemcpy()バージョンは間違いなので無視してください。
    • good
    • 0

たとえば


#include <string.h>
void rotate_element(void *array, size_t size, size_t elem)
{
unsigned char ch;
unsigned char *p = array;
for (size_t i = 0; i < elem; ++i) {
ch = *p;
memmove(p, p+1, size*elem-1);
*(p+size*elem-1) = ch;
}
}
    • good
    • 1

配列の1番目から最後までを0番目にコピーして


tmpに一時保存しておいた値を配列の最後に入れる

int a[10] = { 14,32,96,74,32,26,88,49,20,13 };
int tmp = a[0];
memcpy(&a[0], &a[1], 9 * sizeof(int));
a[9] = tmp;
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング