>  Q&A  >  본문

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

C++中 二维数组如何初始化为空的?
这样可以吗?
int temp[][3]={};
求教 谢谢!

PHPzPHPz2764일 전524

모든 응답(2)나는 대답할 것이다

  • 迷茫

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

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 11:50:31

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

    회신하다
    0
  • 취소회신하다