首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何移动一个ints数组?

如何移动一个ints数组?
EN

Stack Overflow用户
提问于 2017-07-09 04:01:49
回答 2查看 190关注 0票数 1

我有一个大小为50的int数组,前49‘槽’被填充,我想移动数组的49个元素中的每一个位置,这样数组中的第一个元素现在是空闲的。

有没有一种方式来改变整个数组32位呢?像这样:

阵列>(49)> 32;

一些随机的符号..。但我希望它能传达我想要的东西

EN

回答 2

Stack Overflow用户

发布于 2017-07-09 04:14:09

如果你想走很远的路回家..。

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 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)次。

传统方法:

代码语言:javascript
复制
for (i = 5; i > 0; i--)
    arr[i] = arr[i-1];
arr[0] = 5;

下面是一个示例代码,使用memmove做同样的事情:

代码语言:javascript
复制
#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;
}

输出:

代码语言:javascript
复制
1 2 3 4 
After memmove:
5 1 2 3 4

如果您想了解更多关于mmove:模动-in-c++的知识,下面是一篇文章

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44992851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档