2017-07-09 152 views
1

我有一个大小为50的int数组,并且第一个49'插槽'被填充,我想将数组中的49个元素中的每一个都移动一个位置,以便数组中的第一个元素现在是空闲的。如何移位一个int数组?

有没有办法将位移整个数组32位?如:

array [0]>(49)> 32;

一些随机由符号......但我希望它传达什么,我找

+1

'memmove',我相信。 –

+0

你想要完全移位32位?或者你想让可变数量的位移动? – tashakori

+0

你的问题不明确,所以你需要做出决定。您是否想要将数组中的值移入一个元素,或者您想要移位32位吗? 'int'不一定是32位。 – Peter

回答

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; 
} 
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++