你有几个选择:
将所有元素左移一位
如果不需要保存内容:
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 指针数组
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
是一个non-modifiable l-value
。本质上是一个常数。
你也不能这样做...
int array1[4] = { 1, 2, 3, 4 };
int array2[4] = array[1] // !! Compiler error !!
这里的原因是您无法在此上下文中初始化数组。