具有 0 个元素的数组是否与未分配的指针相同?
是int arr[0];
一样的int* arr;
吗?
编辑:如果我做了类似的事情怎么办:
int x[0];
int* const arr = x;
我尝试了这段代码并编译了它。据我所知, x 和 arr 都应该指向内存中的相同位置。在这种情况下会有什么不同?
一点也不。
在 arr[0] 的情况下,arr有一个明确定义的地址。
在 *arr 的情况下,arr只是未初始化。
在您 EDIT 之后,您使用之前定义的数组初始化const arr:变量的内容没有区别,但您可以对它们执行的操作。
本地声明的零长度数组在 C++ 中是非法的,因此它与未分配的指针不同。
零长度数组指向特定地址,即数组的开头。在数组结束后,您将有未定义的数据,在这种情况下,在指向的地址处。
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