您有几个选择:
将所有元素左移一位
如果不需要保留内容:
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]
使用指针将array[1]作为array[0]进行引用
如果您想使用指针而不需要移动/复制数据:
int array[4] = { 1, 2, 3, 4 };
int *pArray = &array[1];
现在,pArray指向数组中的第二个元素,这有效地允许您将数组[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]
原因是array1
是一个非可修改的左值(non-modifiable l-value)
。本质上是常量。
你也不能这样做...
int array1[4] = { 1, 2, 3, 4 };
int array2[4] = array[1] // !! Compiler error !!
这里的原因是您无法在此上下文中初始化数组。