gpt4 book ai didi

c - 你如何在 C 中移动数组的起始索引?

转载 作者:太空狗 更新时间:2023-10-29 15:16:17 25 4
gpt4 key购买 nike

我正在尝试切换 C 中整数数组的起始索引。准确地说,我有以下数组:

{ int array[4] = {1,2,3,4};}

我想将 {array} 更改为包含 {2,3,4} 的 3 个项目的数组。我想知道是否有一种简单的方法可以使用指针而不移动数组中的所有元素来做到这一点。只要前 3 项是 {2,3,4},我也很高兴 {array} 仍然是 4 项的数组。我尝试了以下方法:

{array = &(array[1])}

但是,这不起作用,我收到一条错误消息:{从类型“int *”分配给类型“int[4]”时类型不兼容}。

我的印象是 C 数组是对数组第一个元素的引用。

谁能帮我解决这个问题?

最佳答案

您有几个选择:

将所有元素向左移动一个

如果不需要保存内容:

int array[4] = { 1, 2, 3, 4 };

然后将元素从索引位置 n 复制/移动到索引位置 n-1:

例如:

int i;
for (i = 1; i < n; ++i)
array[i-1] = array[i];

您还可以查看 memmove,这可能更有效。

例如,

memmove(array, array+1, sizeof array - sizeof *array);

与上面的循环做同样的事情。

将元素复制到新数组中,忽略第一个元素

如果需要保留原始数据,则可以创建另一个数组并将元素复制到忽略第一个元素的数组中。

例如,

int array1[4] = { 1, 2, 3, 4 };
int array2[3];
int i;

for (i = 0, i < SIZE_OF_SMALLER_ARRAY; ++i)
array2[i] = array1[i+1]

使用指针将数组[1]引用为数组[0]

如果你想使用指针来消除移动/复制数据的需要:

int array[4] = { 1, 2, 3, 4 };
int *pArray = &array[1];

现在 pArray 有效地指向数组中的第二个元素,允许您将 array[1] 索引为 pArray[0]

使用整型指针数组

int array[4] = { 1, 2, 3, 4 };
int *parray[3];

int i;
for (i = 0; i < SIZE_OF_SMALLER_ARRAY; ++i)
parray[i] = &array[i+1];

注意事项

你不能做的一件事是......

int array1[4] = { 1, 2, 3, 4 };
array1 = &array1[1]; // !! Compiler Error !!

原因是 array1 是一个不可修改的左值。本质上是一个常数。

你也不能这样做......

int array1[4] = { 1, 2, 3, 4 };
int array2[4] = array[1] // !! Compiler error !!

这里的原因是您不能在此上下文中初始化数组。

关于c - 你如何在 C 中移动数组的起始索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com