衝啊!pointer!
今日主題:指向陣列的指標
*arr[4]和(*arr)[4]所表示的意義是不同的。
*arr[4]在之前已討論過,而(*arr)[4]是指向陣列的指標(pointer to array),表示arr是一個指標,指向一個具有4個元素的陣列,也相當於:
arr[ ][4] (因為 * 和 [ ] 是互通的)
請看程式碼:
#include <stdio.h>
main()
{
int arr[][3] = {100,200,300,400,500,600};
int (*ptr)[3];
int i, j;
ptr = arr;
for (i = 0; i < 2; i++){
for (j = 0; j < 3; j++){
printf("ptr[%d][%d] = %d\n", i, j, *(*(ptr+i)+j));
}
}
}
結果如下:
ptr[0][0] = 100
ptr[0][1] = 200
ptr[0][2] = 300
ptr[1][0] = 400
ptr[1][1] = 500
ptr[1][2] = 600
她為什麼不會這樣放呢??...
ptr[0][0] = 100
ptr[1][0] = 200
ptr[2][0] = 300
ptr[3][0] = 400
ptr[4][0] = 500
ptr[5][0] = 600
因為arr是列數未知,但行數為3的陣列
<pre class="c" name="code">int arr[][3] = {100,200,300,400,500,600};
那如果宣告成這樣,會像我說的那樣放嗎??還是從第二維開始放??
int arr[][]
若要變成一維(6列1行),以下宣告會產生總裁說的結果:
<pre class="c" name="code">
int arr[][1]