在C语言中定义二维数组long a[3][5],则数组占多少字节的存储空间? C语言用malloc定义二维数组问题

作者&投稿:仲长店 (若有异议请与网页底部的电邮联系)
c语言中long占4个字节,所以longa[3][5]占4*3*5=60个字节
从元素角度理解a代表a[0][0];从二维数组理解a代表a二维数组名,即二维数组首地址;从一维数组角度理解a代表a[0]即二维数组第一行看作一个一维数组,a[0]为这个一维数组的首地址;
a[1]从二维数组看代表a[1][0]是元素,从一维数组角度看代表二维数组第二行的首地址和上面a[0]一样,

二维数组在存储的时候,可以看做一维数组来对待。上面的数组可以看做以下的数组:
一维数组的第一个元素(由5个元素组成):a[0][0],a[0][1],a[0][2],a[0][3],a[0][4]
一维数组的第二个元素(由5个元素组成):a[1][0],a[1][1],a[1][2],a[1][3],a[1][4]
一维数组的第三个元素(由5个元素组成):a[2][0],a[2][1],a[2][2],a[2][3],a[2][4]
其中,a是一个地址,指向a[3][5]数组的第一个元素(即a[0][0]);而a[1]则表示将a[3][5]数组看做一维数组的第2个元素的地址,也就是a[1][0]的地址。

占3x5x4个字节,a代表这个数组的起始地址,a[1]表示第二行的起始地址。

占用的字节数 3*5*4=60
a为数组首地址 a=&a[0][0]
a[1]=a[1][0]

C语言问题,**a[3][4]占用空间的大小~

如果是 int a[3][4]而且是32位编译器的话,
a是数组名而不是指针,占3*4*4=48字节
a由3个一位数组组成,每个一维数组类型是int [4],数组名分别是a[0]、a[1]、a[2],每个一维数组占16字节

但是你前面那个**怎么回事?数组的定义给出来。如果a[3][4]是数组元素的话,你这么用就溢出了

离开代码讨论问题都是耍流氓。相关的定义语句都给出来

首先,p的类型为 int **
那么p和p+1,相差一个int类型嘛

p先申请了 5个数组长度
后来p[i]又申请了5个数组长度,分别保存在刚才申请的5个元素里

所以,这就相当于定义了P[5][5]咯。。这个大概就是这个意思啦,要画图的话,才好讲。。

至于第二个问题。。。听不懂,哈哈。。**p就是指向指针的指针嘛(不要骂人哈,本来就是嘛)

返回值只有相对于函数,才有返回值之说。。
通俗的讲,**p 是指针的指针, p[i]是指针
如果p定义为p[][],那么,p就是指针的指针, p[i]就是指针 和上面定义是一样的

PS:网上讲解指针的指针的文章多了去了,我在这里也讲不明白,那些文章都条例清晰,内容深入。。回答完毕,给点分下载文库吧