陣列指標即指向陣列元素的指標。陣列名在表達式中轉為指向首元素的指標,故可直接賦值給指標變數。
int arr[] = {99, 15, 100, 888, 252};
int *p = arr; // 等價於 int *p = &arr[0];
arr、p、&arr[0] 三者等價,皆指向陣列開頭。
int len = sizeof(arr) / sizeof(int);
for (int i = 0; i < len; i++)
printf("%d ", *(p+i)); // 等價於 p[i] 或 arr[i]
注意: 無法用 sizeof(p) 求陣列長度,p 僅是指標,編譯器不知其指向陣列大小。
p+i → 第 i 個元素地址*(p+i) / p[i] → 第 i 個元素值p = &arr[2] 後 p-2、p+1 分別指向第 0、3 個元素arr[i] 或 p[i]*(arr+i) 或 *(p+i)陣列名為常量指標(值不可改),陣列指標為變量指標(可移動)。
for (int i = 0; i < len; i++)
printf("%d ", *p++); // *p++ 等價於 *(p++),先取值再移動指標
*arr++ 非法,因 arr 為常量不可修改。
p 指向第 n 個元素:
*p++ ≡ *(p++):取第 n 個值,p 移向下一個*++p ≡ *(++p):p 先移向下一個,取第 n+1 個值(*p)++:取第 n 個值並對該元素值加 1(修改陣列內容)