迷茫2017-04-17 11:50:31
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和你实际初始化的数据为数组分配空间;如果你连初始化也没做,系统直接傻眼,不知道该分配多少空间了,所以编译报错。