【发布时间】:2014-08-01 18:51:54
【问题描述】:
如果我有一个数组,比如说 [1,2,3,4,5,6],我怎样才能使它成为 [2,3,4,5,6,1]?我应该使用哪个循环?我尝试使用 for 循环,但是由于我对 C 编程相当陌生,因此无法生成输出。
【问题讨论】:
如果我有一个数组,比如说 [1,2,3,4,5,6],我怎样才能使它成为 [2,3,4,5,6,1]?我应该使用哪个循环?我尝试使用 for 循环,但是由于我对 C 编程相当陌生,因此无法生成输出。
【问题讨论】:
int array[6] = { 1, 2, 3, 4, 5, 6 };
int array_size = 6;
// array is now { 1, 2, 3, 4, 5, 6 }
int array = array[0]; // #1
for(int i = 1; i < array_size; i++) { // #2
array[i - 1] = array[i];
}
array[array_size - 1] = tmp; // #3
// array is now { 2, 3, 4, 5, 6, 1 }
它是这样工作的:
tmp中。tmp 中的值并将其移到数组的后面。【讨论】:
哎呀。我第一次看错了问题
int len = 5;
char *pOriginal = {0,1,2,3,4}
char ch0 = pOrigina[0];
memmove(pOriginal, &pOrigina[1], len-2) // Thanks guys!
pOriginal[len-1] = ch0;
【讨论】:
"how do I rotate the array by moving the first element to the end?"你的回答只是交换了第一个和最后一个元素,这是不一样的。
memcpy 会导致未定义的行为。 (hint 如何解决这个问题)。
memmove()。
memcpy() 的联机帮助页:“memcpy() 函数将n 字节从内存区域src 复制到内存区域dest。内存区域不能重叠。如果内存区域确实重叠,请使用 memmove()。"