当前位置:首页 > 内存 > 正文

c语言开辟内存空间二维

  • 内存
  • 2024-06-10 00:55:51
  • 8628

一、C语言如何动态分配二维数组??

动态分配二维数组:

voidmain(intargc,char*argv[])

{

intNC=100,NR=200;

inti,j;

char**a;//a[NR][NC]--*a[NR]--a[j][i]

a=(char**)malloc(sizeof(char*)*NR);

for(j=0;j

a[j]=(char*)malloc(sizeof(char)*NC);

}

//释放空间:free(a);

编译错误是因为问题里有p[j]=(char*)malloc,而不是(char*)malloc(n*sizeof(char))。

详细信息:

二维数组的动态分配

二维数组A[m][n],它是一个m行n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标为p到m+p,q到n+q的列下标存储在“row”中-majororder".,则元素a[i][j]的地址计算如下:

LOC(a[i][j])=LOC(a[p][q])+((i−p)*n+(j−q))*t

当以“列优先顺序”存储时,地址计算如下:

LOC(a[i][j])=LOC(a[p][q])+((j−q)*m+(i−p))*t

所需的最小单位数存储该数组的大小为(m-p+1)*(n-q+1)*t字节。

参考来源:--二维数组

参考来源:--C语言


二、C语言二维数组内存是怎么分配的?二维数组实际上是内存中的平面一维数组,解释如下:
int
arr[3][5]
e
int
arr[15]
使用的内存区域大小相同,15*sizeof(int)字节。
如果给出以下定义:
union{
int
a[3][5];
int
b[15];
}U;
您会发现
U.a
=
&U.b
U.a[0]
==
&Ub[0]
U.a[1]
==
&U.b[5]
U.a[2]
==
&U.b[10]
&U.a[2][3]
==
&U.b[13]
规则是:
&U.a[m][n]
==
&U.b[m*5+n],其中5是数组a的第二个维度。
事实上,在运行时使用该公式将二维数组转换为对一维数组的访问。