二维数组定义不够会自动补0

就是二维数组定义的时候。如int[3][4]={{1,1}}这样定义正确吗?后面会自动补0吗?
是C语言的

第1个回答  2010-05-12
会的,写个程序测试一下就知道了,C和C++都一样.
#include <stdio.h>
main()
{
int a[3][4]={{1,1}};
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
printf("%d\n",a[i][j]);
return 0;
}
输出2个1,后面都是0
第2个回答  2010-05-12
会自动补零,测试代码如下。
C++一般会自动补,c就必须自己赋值。

#include <iostream.h>
void main()
{
int arr[3][4]={{1,1}};
for (int i=0;i<3;i++)
{
for (int j=0;j<4;j++)
{
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
}
第3个回答  2010-05-12
C/C++规定,如果用初始化列表对数组进行显式初始化,且没有填充完定义的数组空间时候,剩下的空间中每一个元素都隐式地初始化为零。
所以LZ说的定义方法是正确的。但语法上有问题,定义时必须有数组名且以;结束,例如int a[3][4]={{1,1}};这样才是正确的定义。
PS
1.对于全局/静态对象的定义,如果没有初始化列表,所有元素都会被隐式初始化为零;
2.C++对于初始化列表中元素个数超出定义的数组大小时会产生编译错误(C中只有警告)。
----
已经说了,LZ的问题在C/C++里面行为都一样...,相关问题的细节不同之处在上面的补充中也有提到= =
====
[原创回答团]

参考资料:原创

本回答被提问者采纳