我有一个大小为50的int数组和第一个49'插槽'填充,我想将数组的49个元素中的每一个移动一个位置,以便数组中的第一个元素现在是空闲的。
有没有办法将整个数组的位移位32位?像:
array [0]>(49)> 32;
一些随意编写的符号...但我希望它传达了我正在寻找的东西
答案 0 :(得分:0)
如果你想走很远的路......
#include <stdio.h>
int main(void)
{
int array_size = 5;
int array[] = {5, 1, 2, 3, 4};
int i;
for (i = array_size - 2; i >= 0; i--)
{
array[i+1] = array[i];
if (i == 0)
array[i] = 0; //whatever you want
}
// not necessary, just print the change
int j;
for (j = 0; j < array_size; j++)
printf("%d ", array[j]);
printf("\n");
return 0;
}
答案 1 :(得分:0)
正如@COLDSPEED在评论中建议的那样,memmove
与你期望的非常接近。
void *memmove(void *str1, const void *str2, size_t n)
注意:n
是要移动的字节总大小。从移动32
位开始,你可能想为1 int腾出空间。 (int的大小取决于机器)。因此,使用memmove
,您可以移动1个字节。不是1位。
memmove
的主要目的只是复制。因此,它不应该比直接复制更好。两者都应该花费O(n)次。
传统方法:
for (i = 5; i > 0; i--)
arr[i] = arr[i-1];
arr[0] = 5;
以下是一个示例代码,使用memmove
做同样的事情:
#include <stdio.h>
#include <string.h>
int main ()
{
int i;
int arr[5] = {1, 2, 3, 4};
// Printing before state
for (i = 0; i < 4; i++)
printf ("%d ", arr[i]);
printf ("\n");
// The shift operation
memmove(arr+1, arr, 4*sizeof(int));
// Inserting at the beginning
arr[0] = 5;
// Printing after state
printf("After memmove:\n");
for (i = 0; i < 5; i++)
printf ("%d ", arr[i]);
printf ("\n");
return 0;
}
输出:
1 2 3 4
After memmove:
5 1 2 3 4
如果您想了解有关mmove:memmove-in-c/c++
的更多信息,请参阅以下文章