C语言如何定义一个二维数组,并且通过输入n来确认每行元素个数。

C语言如何定义一个二维数组,并且通过输入n值来确认该数组中每行元素个数。

据我所知 数组大小不能通过参数(宏定义或者动态开辟可以)来控制 只能是定义一个足够大的数组 譬如 a[100][100] 然后你输入n 在用for循环给数组赋值时


for(int i = 0 ;i<(你要多少行);i++){
   for(int j = 0;j<n(控制一行n个);j++){
    赋值语句
  }
}

int main()
{
    int n,m;
    int **p;
    scanf("%d%d",&n,&m);
    //n行m列的数组
    p = (int **)malloc(sizeof(int *) * n);
    for (int i = 0; i < 5; ++i)
    {
        p[i] = (int *)malloc(sizeof(int) * m);
    }
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 2; ++j)
        {
            //输出数组每个元素地址
            printf("%p\n", &p[i][j]);
        }
    }
    for (int i = 0; i < 5; ++i)
        free(p[i]);
    free(p);
    return 0;
}

如果我没理解错的话,你是想先定义一个未知大小的二位数组,然后scanf输入行列的大小,在C语言这需要动态分配malloc,最后记得free一下就行了,在C++的话用STL容器去存储会更方便一点。

int main()
{
int a[][];
int row,column;
scanf("%d%d",&row,&column);
a=(int**)malloc(sizeof(int*)*row);
for(i=0;i<row;i++)
{
  a[i]=(int*)malloc(sizeof(int)*column);
}

for(i=0;i<row;i++)  
    {free(a[i]);}
free(a);
return 0;
}

好久没写了,不知道有没有问题