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];
現在粒子陣列指向有效陣列中的第二元件允許你索引陣列[1]作爲粒子陣列[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 !!
這裏的原因是你無法在這種情況下初始化數組。
這種印象是一種誤解,它仍然被錯誤地認爲是「更直觀」,因此仍然被教導。它遲早會在後面咬一個。 – StoryTeller
數組名稱是一個**常量**,用於描述爲該數組分配的整個內存塊。它永遠不能分配給。當作爲*值*使用時,它會自動轉換爲指向第一個元素的指針,通過該指針可以訪問和修改數組元素。 –
@DaleHagglund:數組名稱是數組類型的表達式。它可以在某些上下文中隱式轉換爲指針值*。數組類型的表達式不能在C中分配,而不僅僅是數組名稱。 – newacct