为了账号安全,请及时绑定邮箱和手机立即绑定

请问C++中二维数组的问题

请问C++中二维数组的问题

C C++
莫回无 2018-07-22 19:12:05
C++中 二维数组如何初始化为空的?这样可以吗?int temp[][3]={};求教 谢谢!
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

C++没有“空数组”这一说,事实上你也不需要真正为空的数组。数组就是用来读写的,空着有什么用?如果你不想看到数组中的某些元素,不读它就行了。声明一个数组,系统就在栈上为你分配一块相应大小的空间。如果数组初始化了,比如说这样

    int temp[][3] = {0};

那么这块空间里都被写入了0。但是,这种声明方式缺少了第一维,所以给人造成困惑:这块空间到底是多大呢?一般来说,应该是3*sizeof(int),也就是说,这个数组里面被填充了3个0。如果这样初始化:

    int temp[][3] = {0, 1, 2};

数组的大小还是3*sizeof(int)。但是,如果这样初始化呢:

    int temp[][3] = {0, 1, 2, 3};

这块数组的大小就是6*sizeof(int)。原因是:原本声明了3列,但是初始化的时候有4个int,于是系统自动又为数组添了一行。同理,如果这样初始化:

    int temp[][3] = {0, 1, 2, 3, 4, 5};

那么数组大小还是6*sizeof(int),而这样初始化:

    int temp[][3] = {0, 1, 2, 3, 4, 5, 6};

这时,数组大小就是9*sizeof(int)了。
但是,如果你不对数组进行初始化,比如说这样:

    int temp[][3];

一般是编译不过的。原因很简单,如果同时给出了第一维m和第二维n,那么数组空间就按照m*n个int来分配;如果只给出第二维n,那么系统需要综合考虑n和你实际初始化的数据为数组分配空间;如果你连初始化也没做,系统直接傻眼,不知道该分配多少空间了,所以编译报错。


查看完整回答
反对 回复 2018-07-24
?
皈依舞

TA贡献1851条经验 获得超3个赞

int temp[这里必须要有一个数字][3]={0};


查看完整回答
反对 回复 2018-07-24
  • 2 回答
  • 0 关注
  • 886 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信