注册 登录
编程论坛 C语言论坛

二维数组的问题---为什么这样写不行?

宁缺T 发布于 2019-11-29 16:18, 1478 次点击
运行结果如图所示:
只有本站会员才能查看附件,请 登录

有关代码
程序代码:
#include<stdio.h>
int main(){
   int row,i,j;
   int a[][4]={0};
   scanf("%d",&row);
   for(i=0;i<row;i++)
     for(j=0;j<4;j++)
       scanf("%d",&a[i][j]);

   for(i=0;i<row;i++)
   {
       for(j=0;j<4;j++)
       {
           printf("%d",a[i][j]);
       }
       printf("\n");
        
     return 0;
   }


2 回复
#2
forever742019-11-29 16:30
ANSI C意义下的数组是固定大小的,尺寸上没有弹性。
#3
纯蓝之刃2019-11-29 18:17
程序代码:
#include<stdio.h>
#include<stdlib.h>

int main()
{
   int row,i,j;
   int **a;
   scanf("%d",&row);

    a=(int**)calloc(row,sizeof(int*));                      //分配动态内存
    for(i=0;i<row;i++)
        a[i]=(int*)calloc(4,sizeof(int));

   for(i=0;i<row;i++)
     for(j=0;j<4;j++)
       scanf("%d",&a[i][j]);

   for(i=0;i<row;i++)
   {
       for(j=0;j<4;j++)
       {
           printf("%3d",a[i][j]);
       }
       printf("\n");
   }

    free(a);                    //释放分配的动态内存
    for(i=0;i<row;i++)
        free(a[i]);

   return 0;
}

可以使用动态内存分配的方法
1