我以三种不同的方式(在堆上或堆栈上)初始化一个数组,但与我的期望相反,它们的大小似乎有两个不同的值。我不明白为什么。
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号。
答案 0 :(得分:2)
最后两个示例不是数组;
第一个是:int asd[0]
定义了一个大小为0的数组,这是不允许的。
如果表达式是常量表达式,则其值应大于零。
第二个:int asd={};
使用聚合初始化int
。 int
4个字节的大小。
第三个:int *asd=new int[0];
是指向动态分配的内存的int
类型的指针。指针的大小为4 bytes
(2 ^ 32个地址)。