对二维数组a[][]来说,a[1] 与 &a[1]相等。我来分析一下我的误解:
首先,a[m] 里面的内容是一个一维数组的首地址。
而 &a[m] 是 a[m] 的地址,它们相等。
说明 a[m] 的内容其实就是他本身的地址编号 (把 a[m] 看成一个变量)
对于一个内容就是地址的变量m,&m 与 m 相等 毋庸置疑。
然而 &a[m][0] 也等于 a[m]
说明 a[m][0] 的地址 就是 a[m] 的内容 , 也就是 a[m] 的地址;
那么,a[m][0] 与 a[m] 就是在同一地址上的不同变量名了(我知道变量这种说法不太准确)
但是,同一个地址,a[m][0] 与 a[m] 的内容确是截然不同,为什么。
我希望那位朋友能耐心看完我的想法,帮我走出误区,感激不尽!
对于二维数组a[m][n]
a 表示 int (*)[m]
&a 表示 int (*)[m][n]
a[m] 表示 int *
&a[m] 表示 int (*)[m]
a[m][0] 表示 int
&a[m][0] 表示 int *
作为特例
a = &a = a[0] = &a[0] = &a[0][0]
a[m] = &a[m] = &a[m][0]
不管你怎么理解的,以我说的为准。
你要习惯从C语言的语法约定去推导规则,而不是根据某个程序的值相等不相等去瞎凑。
你的误解在于 你虽然知道 数组名是首元素的地址,但你忽略了 它是一个指针常量,假设一位数组名 a , a=&a; 同理二维数组也是。