为什么C语言中二维数组的数组名a和*a表示的是同一个值?

编译器处理时不是把二维当做是数组元素都是数组的一维数组处理么?那么a就是这个数组的首地址也就是a[0]的地址&a[0]。但是输出a与*a发现者两个值始终是相同的。... 编译器处理时不是把二维当做是数组元素都是数组的一维数组处理么?那么a就是这个数组的首地址也就是a[0]的地址&a[0]。但是输出a与*a发现者两个值始终是相同的。 展开
 我来答
风若远去何人留
推荐于2017-10-08 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
当定义二维数组a[M][N]时,数组名可以认为是二维指针,其指向二维数组的首地址。
于是a的值就是首地址的值。
而*a,就是a[0],a[0]是第一行的标记,代表第一行的首地址。
在二维数组中,所有元素都是紧密排列的,这样整个数组的首地址,第一行的首地址,和第一个元素的首地址,即a, a[0], &a[0][0] 都是相同的。
于是a和*a的值是相同的。
shine1991
科技发烧友

推荐于2016-05-24 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
当a是二维数组名时,a即&a[0],而*a即a[0]

两者的显式的值是相同的,但是基类型是不同的
追问
那为什么值还会相同?难道a[0]的值和他的地址相同?
追答
说了,是显式的值相同,意义不同

如果定义int a[2][3];

a类型是 int (*)[3]
*a类型是 int *

这二者,显式的只都是相同的,但是意义不同
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
z753576970
2012-04-19
知道答主
回答量:6
采纳率:0%
帮助的人:3.5万
展开全部
*a表示数组的第一个元素的值,而二维数组的第一个元素是一个一维数组。这个一维数组的首地址是a[0],所以a = *a = a[0] = &a[0][0]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
feiba飞吧feiba
2012-04-19
知道答主
回答量:28
采纳率:0%
帮助的人:12.1万
展开全部
两个的地址相同
追问
为什么地址会相同?
追答
数组a刚被调用时,调用的是数组的第一个数据,*a是可以直接代替数组a的,调用*a和调用数组a没多大的区别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
艾珽
2018-03-22 · TA获得超过262个赞
知道答主
回答量:157
采纳率:50%
帮助的人:46.6万
展开全部
首先 a[0] 和 *(a+0)等价,且 a[i]只是一个地址(如同一维数组名 只是一个指针常量)
这些你得知道。
在a[][m]中,  
a为二维数组名,值为0行首地址;
a[0] 和 *a 为      0行0列的地址。

*(a[i]+j)和*(*(a+i)+j) 才是 a[i][j]的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式