c语言二维数组

autointa[8][8];为什么&a[2]=&a[2][0];我只能理解a[2]=&a[2][0];... auto int a[8][8];
为什么 &a[2]= &a[2][0];
我只能理解a[2]= &a[2][0];
展开
 我来答
电子科技小百科
高粉答主

2020-05-05 · 繁杂信息太多,你要学会辨别
知道答主
回答量:4367
采纳率:0%
帮助的人:67.7万
展开全部

1、首先是定义一个二级指针和行列变量【int **array,row,column;】。

2、然后编写输入行列的语句,代码如图。

3、接下来就可以为其开辟一个一个一维装着一维数组的数组。

4、接下来使用【array[i]=(int *)malloc(sizeof(int)*column);】,为数组再次产生一个新的装着数组的数组。

5、然后就可以为其赋值并输出【代码如图】,就完成了。

adoqq_bd
推荐于2017-12-16 · TA获得超过7050个赞
知道大有可为答主
回答量:1818
采纳率:63%
帮助的人:1600万
展开全部
auto int a[8][8];
那么a[2]就相当于一个一维数组名,那么a[2]的数值等于&a[2][0]是没什么疑问的
数组名本身代表数组的首地址,那&a[2]是怎么回事呢,早期的c编译器会认为这是非法的,但是从语义上讲,对一个数组对象取地址没什么不合理的,于是C99开始允许对数组名取地址,相当于把该数组维数提升了1级,在这个例子里a[2]的类型是int*, &a[2]的类型是int(*)[8];,就是说a[2]和&a[2]数值上是相同的,但含义不同,&a[2]的类型和a相同的(提升了一级)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
145飞雪090
2012-04-07 · TA获得超过621个赞
知道小有建树答主
回答量:282
采纳率:100%
帮助的人:155万
展开全部
&a[2]是二维数组第2行首地址(由0开始),这是因为把二维数组看作是“一维数组”,该“一维数组”的每个元素又是一个一维数组。&a[2]就是这种情况下“一维数组”第二个元素的地址,这个第二个元素实际上是一个一维数组。
&a[2][0]是二维数组第2行第0列元素首地址
所以二者相同。
追问
我的理解是 int a[8][8] 等价于 int ((*a)[8])[8],
只是后者没有分配空间,对不对啊?
追答
应该是 int a[8][8] 等价于 int (*a)[8] 吧,至于分配空间的问题,应该是分配了,这我也不确定,没思考过这么个问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一崽1100
2012-04-07 · TA获得超过162个赞
知道答主
回答量:115
采纳率:0%
帮助的人:85.1万
展开全部
定义的数组,其中,a[2]表示int类型的值。&a[2]表示该值的地址,也就是该行的起始地址。
楼主的第二条语句感觉是错的。。程序中还是不要用的好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
muzhi_007
2012-04-07 · 超过10用户采纳过TA的回答
知道答主
回答量:34
采纳率:33%
帮助的人:12.5万
展开全部
行首地址和该行首元素地址相同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式