我有一个大小为50的int数组,并且第一个49'插槽'被填充,我想将数组中的49个元素中的每一个都移动一个位置,以便数组中的第一个元素现在是空闲的。如何移位一个int数组?
有没有办法将位移整个数组32位?如:
array [0]>(49)> 32;
一些随机由符号......但我希望它传达什么,我找
我有一个大小为50的int数组,并且第一个49'插槽'被填充,我想将数组中的49个元素中的每一个都移动一个位置,以便数组中的第一个元素现在是空闲的。如何移位一个int数组?
有没有办法将位移整个数组32位?如:
array [0]>(49)> 32;
一些随机由符号......但我希望它传达什么,我找
如果你想带回家的很长的路要走......
#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;
}
由于@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++
'memmove',我相信。 –
你想要完全移位32位?或者你想让可变数量的位移动? – tashakori
你的问题不明确,所以你需要做出决定。您是否想要将数组中的值移入一个元素,或者您想要移位32位吗? 'int'不一定是32位。 – Peter