这个符合c语言的语法的,可能是你的编译器的问题吧;我用如下程序进行了测试:
#include
int main(int argc, char *argv[])
{ int a[3][4]={{3},{},{9}};
int i,j;
for (i=0;i<3;i++)
{ for (j=0;j<4;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
怎么可能是正确的呢!!
你这个是个二位数组,所谓二位数组就是相对一维数组而言的!
举个例子吧?
比如:int a [3][4];
那么这个二位数组就有3*4=12个元素;
分别是a[0][0];a[0][1];a[0][2];a[0][3];
a[1][0];a[1][1]a[1][2]a[1][3];
a[2][0]; a[2][1]; a[2][2]; a[2][3];
也可以这样写:
int a[3][4]={{a[0][0];a[0][1];a[0][2];a[0][3]}, a[1][0];a[1][1]a[1][2]a[1][3],a[2][0]; a[2][1]; a[2][2]; a[2][3];}
就是把它看成一个一维数组,共有3个元素,但又在每个元素当中又有4个元素!!!
不正确!
{}表示一个数组,你的二层数组里,要么只有一个数据,要么没有,是不能赋值的,我改了下,这样就应该可以了:
int a[3][4]={{3,-1,-1,-1},{-1,-1,-1,-1},{9,-1,-1,-1}};
是你的编译器问题,不同编译器会有不同结果。我的GCC编译器是没有问题的。
理论上这样的初始化也是没有问题的,说元素个数不够的估计基本知识不及格吧。。。就是相当于给二维数组里面的一维子数组赋初值而已,单个数字是赋值第一个元素,空代表不赋值由编译器进行默认初始化。