我正在C语言中工作,并且在仅知道一个长度的情况下试图声明一个2D数组(我只知道最初有多少“行”,而不是多少“列”)。我知道在不知道初始大小的情况下声明一个普通数组
int *rows = null;
以及稍后致电
rows = malloc(sizeof(int)*10);
可以工作,但是我可以对2D数组做类似的事情吗?
答案 0 :(得分:0)
请参阅我的示例,为您提供2个想法,分配2d数组
#include <stdio.h>
#include <stdlib.h>
int main(){
//Example Ar_2D[20][50] from alloc
//method 1
int i;
int **Ar_2D=(int**)malloc(sizeof(int*)*20);
for(i=0;i<20;i++){
Ar_2D[i]=(int*)malloc(sizeof(int)*50);
}
//----------------------do everything you want with Ar_2D[20][50]
//using this method cause below
//&(Ar_2D[0][49])+1 != &(Ar_2D[1][0]) means not always == if you are luck will ==
if(&(Ar_2D[0][49])+1 != &(Ar_2D[1][0])){
printf("you are right about Ar_2D!\n");
}
//----------------------Release memory alloc
for(i=0;i<20;i++){
free(Ar_2D[i]);
}
free(Ar_2D);
//----------------------
//Example Ar_2D_M2[20][50] from alloc
//method 2
int **Ar_2D_M2=(int**)malloc(sizeof(int*)*20);
int *Ar_1D=(int*)malloc(sizeof(int)*50*20);
for(i=0;i<20;i++){
Ar_2D_M2[i]=&(Ar_1D[i*50]);
}
//----------------------do everything you want with Ar_2D_M2[20][50]
//using this method cause below
//&(Ar_2D_M2[0][49])+1 == &(Ar_2D_M2[1][0]) always ==
if(&(Ar_2D_M2[0][49])+1 == &(Ar_2D_M2[1][0])){
printf("you are right about Ar_2D_M2!\n");
}
//----------------------Release memory alloc
free(Ar_1D);
free(Ar_2D_M2);
return 0;
}
方法2会给你
1 2 3 ... 20
21 ..... 40
41 ..... 60
...
二维数组中的精细顺序(推子)
3D 4D 5D就像这样的1D构建