问题描述
- 关于二维数组a中,a[1] 与 &a[1]相等的一个疑问?(从来没弄懂)
-
对二维数组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; 同理二维数组也是。
时间: 2024-09-17 03:28:37