我有一个大小为50的int数组,前49‘槽’被填充,我想移动数组的49个元素中的每一个位置,这样数组中的第一个元素现在是空闲的。
有没有一种方式来改变整个数组32位呢?像这样:
阵列>(49)> 32;
一些随机的符号..。但我希望它能传达我想要的东西
发布于 2017-07-09 04:14:09
如果你想走很远的路回家..。
#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;
}发布于 2017-07-09 04:32:27
正如@COLDSPEED在评论中所建议的那样,memmove非常接近您的预期。
void *memmove(void *str1, const void *str2, size_t n)
注释:n是要移动的总大小(以字节为单位)。我想,通过移动32位,您可能需要为1int腾出空间。( int的大小取决于机器)。因此,使用memmove,您可以移动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:模动-in-c++的知识,下面是一篇文章
https://stackoverflow.com/questions/44992851
复制相似问题