就是二维数组定义的时候。如int[3][4]={{1,1}}这样定义正确吗?后面会自动补0吗?
是C语言的
二维数组定义不够会自动补0
答案:3 悬赏:30 手机版
解决时间 2021-04-11 15:15
- 提问者网友:皆是孤独
- 2021-04-11 11:31
最佳答案
- 五星知识达人网友:旧脸谱
- 2021-04-11 11:49
C/C++规定,如果用初始化列表对数组进行显式初始化,且没有填充完定义的数组空间时候,剩下的空间中每一个元素都隐式地初始化为零。
所以LZ说的定义方法是正确的。但语法上有问题,定义时必须有数组名且以;结束,例如int a[3][4]={{1,1}};这样才是正确的定义。
PS
1.对于全局/静态对象的定义,如果没有初始化列表,所有元素都会被隐式初始化为零;
2.C++对于初始化列表中元素个数超出定义的数组大小时会产生编译错误(C中只有警告)。
----
已经说了,LZ的问题在C/C++里面行为都一样...,相关问题的细节不同之处在上面的补充中也有提到= =
====
[原创回答团]
所以LZ说的定义方法是正确的。但语法上有问题,定义时必须有数组名且以;结束,例如int a[3][4]={{1,1}};这样才是正确的定义。
PS
1.对于全局/静态对象的定义,如果没有初始化列表,所有元素都会被隐式初始化为零;
2.C++对于初始化列表中元素个数超出定义的数组大小时会产生编译错误(C中只有警告)。
----
已经说了,LZ的问题在C/C++里面行为都一样...,相关问题的细节不同之处在上面的补充中也有提到= =
====
[原创回答团]
全部回答
- 1楼网友:逐風
- 2021-04-11 12:45
会自动补零,测试代码如下。
C++一般会自动补,c就必须自己赋值。
#include
void main()
{
int arr[3][4]={{1,1}};
for (int i=0;i<3;i++)
{
for (int j=0;j<4;j++)
{
cout<
- 2楼网友:深街酒徒
- 2021-04-11 12:18
首先要明确数组的在计算机的分配方式。
计算机会分配一块《连续》的内存给数组来使用,这样就可以通过《下标》很方便的访问数组的元素。因此数组的长度就一定是要固定的,因为内存是一直在动态的分配和释放的,如果数组的长度不固定,那么数组后面的内存到底还要不要分配给别人。如果分配了,数组忽然要增加,那数组内存就不能是连续的了。
所有定义数组时可以省略的字段都是因为可以确定长度,才可以省略。不是说一维数组不能省略长度,当对数组中所有元素都初始化的时候是可以省略的。
比如int a[] = {1,2,3,4,5},这么一定可以省略长度,因为数组长度固定是5了。
而二维数组,当不初始化数组中的任何一个元素时,行列都需要制定,这样才能确定数组的大小。当初始化了其中的元素时,约定制定列数,就可以通过初始化的元素个数,算出最小的行数。
但是行列都不制定就不可以了,比如我初始化了6个元素,即可以是a[2][3]也可以是a[3][2]也可以是a[1][6],会发生歧义,是不允许的。所以二维数组的初始化必须制定一个,至于只必须制定行还是必须制定列,再c语言定义的时候大家预定俗成了制定列,所以就延续下来了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯