8

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

int arr[0];一样的int* arr;吗?

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

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

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

4

3 回答 3

13

一点也不。

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

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

在您 EDIT 之后,您使用之前定义的数组初始化const arr:变量的内容没有区别,但您可以对它们执行的操作。

于 2012-04-20T15:15:57.107 回答
4

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

于 2012-04-20T15:27:20.737 回答
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

于 2012-04-20T15:22:23.093 回答