具有0个元素的数组

时间:2012-04-20 15:14:06

标签: c++ arrays pointers

一个0元素的数组是否与未分配的指针相同?

int arr[0];int* arr;相同吗?

编辑:如果我做了类似的事情该怎么办:

int x[0];
int* const arr = x;

我尝试了这段代码并编译完成。据我所知,x和arr都应指向内存中的相同位置。这种情况会有什么不同?

3 个答案:

答案 0 :(得分:13)

完全没有。

在arr [0]的情况下, arr 有一个定义良好的地址。

在* arr的情况下, arr 刚刚未初始化。

在编辑之后,使用之前定义的数组初始化 const arr :变量的内容没有区别,但在你可以采取的行动。

答案 1 :(得分:4)

本地声明的零长度数组在C ++中是非法的,因此它与未分配的指针不同。

答案 2 :(得分:0)

零长度数组指向特定地址,即数组的开头。在数组结束之后,您将获得未定义的数据,在这种情况下,是指向的地址。

int arr[0];
int* ptr;

// arr is a reliable value;
// *arr is not;
// ptr is not;

这种方法很有用:http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Zero-Length.html