为什么C语言中二维数组的数组名a和*a表示的是同一个值?
编译器处理时不是把二维当做是数组元素都是数组的一维数组处理么?那么a就是这个数组的首地址也就是a[0]的地址&a[0]。但是输出a与*a发现者两个值始终是相同的。...
编译器处理时不是把二维当做是数组元素都是数组的一维数组处理么?那么a就是这个数组的首地址也就是a[0]的地址&a[0]。但是输出a与*a发现者两个值始终是相同的。
展开
展开全部
当a是二维数组名时,a即&a[0],而*a即a[0]
两者的显式的值是相同的,但是基类型是不同的
两者的显式的值是相同的,但是基类型是不同的
追问
那为什么值还会相同?难道a[0]的值和他的地址相同?
追答
说了,是显式的值相同,意义不同
如果定义int a[2][3];
a类型是 int (*)[3]
*a类型是 int *
这二者,显式的只都是相同的,但是意义不同
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*a表示数组的第一个元素的值,而二维数组的第一个元素是一个一维数组。这个一维数组的首地址是a[0],所以a = *a = a[0] = &a[0][0]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两个的地址相同
追问
为什么地址会相同?
追答
数组a刚被调用时,调用的是数组的第一个数据,*a是可以直接代替数组a的,调用*a和调用数组a没多大的区别
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先 a[0] 和 *(a+0)等价,且 a[i]只是一个地址(如同一维数组名 只是一个指针常量)
这些你得知道。
在a[][m]中,
a为二维数组名,值为0行首地址;
a[0] 和 *a 为 0行0列的地址。
*(a[i]+j)和*(*(a+i)+j) 才是 a[i][j]的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询