因為課堂上沒聽懂,又看不懂教科書(《C語言程序設計教程》第3版 譚浩強,張基溫編著)上晦澀的表達方式,昨天晚上特意拿《C語言入門經典》這本書自己研究了一晚的數組與指針。
先來一個簡單的程序:
1 #include<stdio.h> 2 3 int main() 4 { 5 char board[3][3]={ 6 {'1','2','3'}, 7 {'4','5','6'}, 8 {'7','8','9'} 9 }; 10 11 12 printf("value of board[0][0] : %c\n", board[0][0]); 13 14 printf("value of *board[0] : %c\n", *board[0]); 15 printf("value of **board : %c\n", **board); 16 17 18 19 return 0; 20 21 }
1 輸出如下: 2 3 value of board[0][0] : 1 4 5 value of *board[0] : 1 6 7 value of **board : 1 8 9 10 11 board[0][0]
在二維數組board[3][3]中:
board 相當於一個指針(*board/board[0])的指針,指向第0個子數組的第0個元素,即二維數組board[3][3]的首個元素。即,board表示的是二維數組裡的第0個子數組的地址。
*board 使用取消引用運算符*,取消對board這一指針的引用,得到board所指的值。*board相當於一個指針,指向第0個子數組裡的元素。 *board 等同於 board[0] (*board == board[0] ),即二維數組裡的第0個子數組中第0個元素的地址。
**board 再次使用取消運算符*,取消對*board這一指針的引用,得到*board所指的值。即,**board是第0個子數組中第0個元素的值。
board[0] 相當於一個指針,指向第0個子數組裡第0個元素,即二維數組board[3][3]的首個子數組的首個元素。即,board[0]是第0個子數組裡第0個元素的地址。
*board[0] 使用取消運算符*,取消對board[0]這一指針的引用,得到board[0]所指的值。即,*board[0]是第0個子數組裡第0個元素的值。
board[0][0]相當於一個變量名稱。
*board[0]與**board是對 數組 相當於 指針的應用。
這就是我昨天晚上自學的收獲與體會了。
這是我第一次在博客園發隨筆,而且不確定我的總結有沒有錯誤,或者有更簡潔、更透徹的理解,懇請各位志同道合的同學、各位大牛批評指教。謝謝大家~