二维数组,定义时怎样初始化 int N; cin>>N; a[N][N]={0}; 为什么提示错误

有没有人在啊,想请讲解下,二维数组,定义时怎样初始化 int N; cin>>N; a[N][N]={0}; 为什么提示错误
最新回答
只想待在家

2024-09-29 00:37:19

很多学习C或者C++容易忽略的一个问题,数组只能在初始化的时候才可以连续的赋值,反之,只能一个一个的赋值。
你上面使用的N是变量,数组的定义规定不可以使用变量,如果你使用宏定义就可以了,
比如:#define N 10
int a[N][N]={0};这样是正确的
初始化:int a[2][5]={{1,23,3,4,5},{6,76,8,9,0}};这个是初始化
赋值法:int a[2][5];
for(int i=0;i<2;i++)
for(int j=0;j<5;j++)
scanf("%d",&a[i][j]);
初始化就是在定义的时候赋值,非初始化就是定义之后的语句中赋值,
安陵忻美

2024-09-29 08:16:24

数组的的大小必须提前给定,比如a[10][10],不能动态的定义大小。
等待__经年

2024-09-29 00:00:31

a[N][N]中N是变量 编译时没法确定需要分配空间的大小
追问
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
a[i][j]=0;
cout<<a[i][j]<<" ";
}
cout<<endl;
}
为什么这样编译 就没有提示错误呢 N不还是变量么?谢谢
追答
你是用的GCC3.2以后的版本编译的吗 
按理对于输入的变量N 直接使用int a[N][N]这种写法是不被标准C++承认的
只有一个C99标准支持这种动态长度数组,而gcc支持其在C++中使用
而即使是gcc,也只能像你后面那样初始化动态长度数组
因为后一种情况,在编译时,编译器会在你定义数组和初始化的代码之间自动插入一些代码,使得你在初始化的时候,这个数组的空间已经是被分配好的了
PS:如果你想动态分配数组空间 尽量使用new关键字
如梦如幻

2024-09-29 06:01:04

int *a;
int N;
cin>>N;
a = (int*)malloc(sizeof(int)*N*N);
memset((char*)a,0,sizeof(int)*N*N);
...
free(a);