C ++空数组大小

时间:2015-09-11 11:04:12

标签: c++ c++11

我以三种不同的方式(在堆上或堆栈上)初始化一个数组,但与我的期望相反,它们的大小似乎有两个不同的值。我不明白为什么。

int asd[0];    
sizeof(asd);   //ouput 0;   

int asd={};
sizeof(asd);    //output 4;

int *asd=new int[0];
sizeof(asd);    //output 4;

由于数组名是指向已分配内存块的指针,并且指针的大小为4,我认为输出2和3是正确的。

但我不明白为什么输出1没有显示4号。

1 个答案:

答案 0 :(得分:2)

最后两个示例不是数组;

第一个是:int asd[0]定义了一个大小为0的数组,这是不允许的。

  

如果表达式是常量表达式,则其值应大于零。

第二个:int asd={};使用聚合初始化intint 4个字节的大小。

第三个:int *asd=new int[0];是指向动态分配的内存的int类型的指针。指针的大小为4 bytes(2 ^ 32个地址)。