首先,你应该知道“数组名”单独使用是什么意思,他的意思是代表了该数组的第一个数,也就是说a在你的程序中代表的是a[0]。其次,指针变量在未加上*号的时候,给它赋值是一个给它地址的过程(简单说,就是把某变量的地址告诉指针),所以在第一个函数中,&a 等价于 &a[0]。接着,二维数组的数组名不再是a了,他应该是a[2](方括号中是某个常数,这里只是用2来表示而已)所以二维数组a[2]表示a[2][0]的值(取数组的第一个值),而在二维数组中直接用a,它代表的是a[0],但a[0]并不是数组的某一个值,它是a[0][0]的地址。相关内容在教科书中应该有详解,我这里再提供一个记住指针和数组关系的小窍门。记住,在多维数组中,少一个方括号,就相当于少了一个指针的*号。
以下是引用Johnsonzhen在2013-1-20 22:02:54的发言:
因为一个数组是a[4](一维),另一个是a[3][4](二维),对于一维数组a[4]中的a 代表的a的首地址,也可以说是&a[0],但是&a这时就该数组的地址;对于二维数组a[3][4]中a 代表a[0](a[0]这时是数组地址而不是元素的地址);如果用(*p)[4]指向一维数组的话,必须指向数组的地址,而不是元素地址。假设你用的指针p而不是(*p)[4]的话,就可以p=a(a[4]中的a),p=&a[0](a[3][4]中的);因为p需要元素地址。 就像7楼列举的。
我是这样理解的,不知道别人,希望帮到你!
这个是正解
因为一个数组是a[4](一维),另一个是a[3][4](二维),对于一维数组a[4]中的a 代表的a的首地址,也可以说是&a[0],但是&a这时就该数组的地址;对于二维数组a[3][4]中a 代表a[0](a[0]这时是数组地址而不是元素的地址);如果用(*p)[4]指向一维数组的话,必须指向数组的地址,而不是元素地址。假设你用的指针p而不是(*p)[4]的话,就可以p=a(a[4]中的a),p=&a[0](a[3][4]中的);因为p需要元素地址。 就像7楼列举的。
我是这样理解的,不知道别人,希望帮到你!