因为课堂上没听懂,又看不懂教科书(《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是对 数组 相当于 指针的应用。
这就是我昨天晚上自学的收获与体会了。
这是我第一次在博客园发随笔,而且不确定我的总结有没有错误,或者有更简洁、更透彻的理解,恳请各位志同道合的同学、各位大牛批评指教。谢谢大家~