1、使用malloc函数,先分区分配第一维的大小,后再再
循环分配每一维的大小。
2、例程,怎么分配3行4列二维数组:
#includeltstdio.hgt
#includeltmalloc.hgt
intmain()
{
int**a
inti,j
a(int**)malloc(sizeof(int*)*3)//为二维数组分配3行
for(i0ilt3i){//为每列分配4个大小空间
a[i](int*)malloc(sizeof(int)*4)
}
//系统初始化
for(i0ilt3i){
for(j0jlt4j){
a[i][j]ij
}
}
//输出测试
for(i0ilt3i){
for(j0jlt4j){
printf(#34%d#34,a[i][j])
}
printf(#34
#34)
}
//能量代码开辟的空间
for(i0ilt3i){
free(a[i])
}
1.二维数组array[x][y]必须定义x,y,用一维数组基于的话必须定义方法array[n],nx*y个大小的一维数组2.取值的时候,array[x][y]不对应于array[n]。
其中nx*yy
第一种是普通地的二维数组的表示方法。
第二种是用一维数组来它表示二维数组,从没显示的元素地址更说明,二维数组和一维数组意思是的二维数组在内存中的储存不过是差不多的,但是不使用二维数组虽然要简单的些,如果能用不着通过地址转换。
第三种来表示是用指针数组。本例中的c[i]中的元素当然是地址。这种方法对各个元素大小不一样的情况下比较适用规定。如:可以假设有若干个不等长字符串必须我们全面处理,如果可以使用a[i][j]结构,则j要取这些字符串长度的的最值,看来这种方法浪费掉空间。
如果没有常规*a[i]结构,则因此a中仅保存每个字符串的首地址,而不是串本身,这不单节省用水了空间,不过增加了再对串进行操作的时间。
第四种为用对准指针的变量来它表示。别种是对准指针的指针,不能不能把普通的二维数组的首地址(如本例中的a)赋给它。(毕竟a并非指向指针的指针)。是可以把第三种中的数组指针的首地址赋给它。这种带的相对较少。