在C中声明2D数组仅知道一个的长度

时间:2019-09-10 00:05:32

标签: c arrays multidimensional-array

我正在C语言中工作,并且在仅知道一个长度的情况下试图声明一个2D数组(我只知道最初有多少“行”,而不是多少“列”)。我知道在不知道初始大小的情况下声明一个普通数组

int *rows = null;

以及稍后致电

rows = malloc(sizeof(int)*10);

可以工作,但是我可以对2D数组做类似的事情吗?

1 个答案:

答案 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构建