c语言二维数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言二维数组相关的知识,希望对你有一定的参考价值。
auto int a[8][8];
为什么 &a[2]= &a[2][0];
我只能理解a[2]= &a[2][0];
1、首先是定义一个二级指针和行列变量【int **array,row,column;】。
2、然后编写输入行列的语句,代码如图。
3、接下来就可以为其开辟一个一个一维装着一维数组的数组。
4、接下来使用【array[i]=(int *)malloc(sizeof(int)*column);】,为数组再次产生一个新的装着数组的数组。
5、然后就可以为其赋值并输出【代码如图】,就完成了。
参考技术A 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相同的(提升了一级)本回答被提问者采纳 参考技术B &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] 吧,至于分配空间的问题,应该是分配了,这我也不确定,没思考过这么个问题。
参考技术C 定义的数组,其中,a[2]表示int类型的值。&a[2]表示该值的地址,也就是该行的起始地址。楼主的第二条语句感觉是错的。。程序中还是不要用的好 参考技术D 行首地址和该行首元素地址相同
C语言怎么用for循环为二维数组赋值?请举个例子。
C语言怎么用for循环为二维数组赋值?请举个例子。
参考技术A 给m*n二维数组赋值1~m*nfor(i=0;i<m;i++)
for(j=0;j<n;j++)
a[i][j]=i*m+j;本回答被提问者和网友采纳
以上是关于c语言二维数组的主要内容,如果未能解决你的问题,请参考以下文章