指標系統學習3 多維陣列與指標

2022-03-22 06:18:00 字數 3205 閱讀 1780

用指標變數可以指向一維陣列中的元素,也可以指向多維陣列中的元素。但在概念上和使用上,多維陣列的指標比一維陣列的指標要複雜一些。

先回顧一下多維陣列的性質,可以認為二維陣列是「陣列的陣列」,例 :

定義int a[3][4]=,{9,11,13,15},{17,19,21,23}};

則二維陣列a是由3個一維陣列所組成的。設二維陣列的首行的首位址為2000,

則有……

記憶體中資料存放圖示:

原始碼分析:輸出二維陣列有關的值

#include void

main()

; printf(

"a: %d\n

", a);

printf(

"*a: %d\n

", *a);

printf(

"a[0]: %d\n

", a[0

]); printf(

"&a[0]: %d\n

", &a[0

]); printf(

"&a[0][0]: %d\n

", &a[0][0

]); printf(

"a+1: %d\n

", a+1

); printf(

"*(a+1): %d\n

", *(a+1

)); printf(

"a[1]: %d\n

", a[1

]); printf(

"&a[1]: %d\n

", &a[1

]); printf(

"&a[1][0]: %d\n

", &a[1][0

]); printf(

"a+2: %d\n

", a+2

); printf(

"*(a+2): %d\n

", *(a+2

)); printf(

"a[2]: %d\n

", a[2

]); printf(

"&a[2]: %d\n

", &a[2

]); printf(

"&a[2][0]: %d\n

", &a[2][0

]); printf(

"a[1]+1: %d\n

", a[1]+1

); printf(

"*(a+1)+1: %d\n

", *(a+1)+1

); printf(

"*(a[1]+1): %d\n

", *(a[1]+1

)); printf(

"*(*(a+1)+1): %d\n

", *(*(a+1)+1

));}

結果:

1 a: 2686736

2 *a: 2686736

3 a[0]: 2686736

4 &a[0]: 2686736

5 &a[0][0]: 2686736

6 a+1: 2686752

7 *(a+1): 2686752

8 a[1]: 2686752

9 &a[1]: 2686752

10 &a[1][0]: 2686752

11 a+2: 2686768

12 *(a+2): 2686768

13 a[2]: 2686768

14 &a[2]: 2686768

15 &a[2][0]: 2686768

16 a[1]+1: 2686756

17 *(a+1)+1: 2686756

18 *(a[1]+1): 5

19 *(*(a+1)+1): 5

20 請按任意鍵繼續. . .

view code

指向多維陣列元素的指標變數:

把二維陣列a分解為一維陣列a[0],a[1],a[2]之後,設p為指向二維陣列的指標變數。可定義為:int (*p)[4],它表示p是乙個指標變數,它指向包含4個元素的一維陣列。若指向第乙個一維陣列a[0],其值等於a,a[0],或&a[0][0]等。而p+i則指向一維陣列a[i]。

從前面的分析可得出*(p+i)+j是二維陣列i行j 列的元素的位址,而*(*(p+i)+j)則是i行j列元素的值。

二維陣列指標變數說明的一般形式為:型別說明符  (*指標變數名)[長度]

其中「型別說明符」為所指陣列的資料型別。「*」表示其後的變數是指標型別。「長度」表示二維陣列分解為多個一維陣列時,一維陣列的長度,也就是二維陣列的列數。

實戰演練:用指標變數輸出二維陣列元素的值

#include void

main()

;

int (*p)[4

];

inti, j;

p =a;

for( i=0; i < 3; i++)

printf("\n

");}

}

例題:通過輸入指定行數和列數列印出二維陣列對應任一行任一列元素的值。

#include void

main ( )

;

int (*p)[4

], i, j;

p =a;

printf(

"i = ");

scanf("%d

", &i);

while( i > 2 || i < 0

)

printf(

"j = ");

scanf("%d

", &j);

while( j > 3 || j < 0

)

printf(

"a[%d, %d] = %d\n

", i, j, *(*(p+i)+j));

}

view code

多維陣列與指標

今天在寫遍歷二維陣列的時候,突然思考這個問題,原因在於作內層迴圈時,對指標和陣列理解不到位。雖然一直都會也寫遍歷二維陣列,但是原先從沒有想過這個問題。逃 標頭檔案 ifndef treble h define treble h includetypedef int int array 3 void ...

多維陣列與指標

用指標變數可以指向一維陣列中的元素,也可以指向多維陣列中的元素,但在概念和使用上,多維陣列的指標比一維陣列的指標要複雜一些。可以認為二維陣列是陣列的陣列。例 定義 int a 3 4 則二維陣列a是由3個一維陣列所組成的,設二維陣列的首行首位址為2000,表示形式 含義位址 a二維陣列名,指向一維陣...

多維陣列與指標

用指標變數可以指向一維陣列中的元素,也可以指向多維陣列中的元素,但在概念和使用上,多維陣列的指標比一維陣列的指標要複雜一些。可以認為二維陣列是陣列的陣列。例 定義 int a 3 4 則二維陣列a是由3個一維陣列所組成的,設二維陣列的首行首位址為2000,表示形式 含義位址 a二維陣列名,指向一維陣...