黑马程序员技术交流社区

标题: 请教大神关于数组名访问二维数组的问题,在下感激不胜! [打印本页]

作者: 丁丙乙甲    时间: 2015-7-16 19:52
标题: 请教大神关于数组名访问二维数组的问题,在下感激不胜!
int[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
为什么是**a==1而不是*a==1?
a的值等于第一行的首地址,而第一行的首地址不是等于&a[0][0]吗?那*a不就等于a[0][0]吗?那为什么是**a才等于a[0][0]。
作者: 294250051    时间: 2015-7-17 10:52
a是二维数组,二维数组的数组名作为指针变量名的时候指代的是一维数组的地址,而不是元素的地址。而一维数组的数组名做指针变量名的时候指向的才是一维数组中元素的首地址。一维数组的地址和元素地址自然不是一回事
作者: 紫荆秋雪    时间: 2015-7-17 12:51
你可以用一维数组的思想来考虑二维数组

可以把二维数组看做特殊的一维数组
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
所以一维数组
int a[3]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
所以:
*a是“一维数组”的内容:{1,3,5,7}
因为这是int型的一维数组,所以应该取出的内容是 “值”才对,现在取出的内容又是一个一维数组
所以只能理解为这一次取得内容是一维数组{1,3,5,7}的地址。<这一点要理解>
所以再给“一维数组{1,3,5,7}”进行一次' * '运算,这次表示取“一维数组{1,3,5,7}”中的内容
所以
**a就等于1。

如果不是很懂可以看看我总结的,由于内容太多就不适合复制到这里了
http://blog.csdn.net/zjqx_w/article/details/46910257







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2