一个0元素的数组是否与未分配的指针相同?
int arr[0];
与int* arr;
相同吗?
编辑:如果我做了类似的事情该怎么办:
int x[0];
int* const arr = x;
我尝试了这段代码并编译完成。据我所知,x和arr都应指向内存中的相同位置。这种情况会有什么不同?
答案 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