C++;本地数组和成员数组在MinGW上被分配到相同的内存位置 我正在做一些实验来解决一个练习题,从C++程序设计语言(第四版),Stroustrup。
这是我的密码:C++;本地数组和成员数组在MinGW上被分配到相同的内存位置 我正在做一些实验来解决一个练习题,从C++程序设计语言(第四版),Stroustrup。,c++,arrays,mingw,C++,Arrays,Mingw,这是我的密码: #include <iostream> using std::cout; using std::endl; struct arr_holder { int mem_arr[]; }; int main() { int lcl_arr[10]; arr_holder ah; cout << &lcl_arr[0] << endl; cout << &ah.mem_arr[
#include <iostream>
using std::cout;
using std::endl;
struct arr_holder {
int mem_arr[];
};
int main()
{
int lcl_arr[10];
arr_holder ah;
cout << &lcl_arr[0] << endl;
cout << &ah.mem_arr[0] << endl;
return 0;
}
但是,在MinGW g++(5.3.0)上编译时,它们是相同的:
C:\sandbox>g++ foo.cc && a.exe
0x60fef8
0x60fef8
因此,显然,写入
lcl\u arr
或ah.mem\u arr
会导致写入相同的数组,因为它们指向相同的地址,这让我感到非常惊讶,因为我认为本地数组(lcl\u arr
)和成员数组(ah.mem\u arr
)是完全不同的事情
有人能解释一下为什么他们在MinGW上得到相同的地址吗?< /P> <代码> ApCP::17:警告:ISO C++禁止零大小数组“MimiAlr”[-Wpedantic ] int MyMiARR[];代码>这不是标准C++。您看到的是C扩展:“因为我认为本地数组(lcl_arr)和成员数组(ah.mem_arr)是完全不同的东西。”-它们不是。您使用的C扩展依赖于您在创建对象时分配额外的内存。如果将其作为局部变量分配,则不会为零大小的阵列提供额外的存储。在我看来,这是不确定的行为。好,但是你看到的行为不是由C++标准定义的,因为零大小的数组不是它的一部分-所以不要使用它们。
C:\sandbox>g++ foo.cc && a.exe
0x60fef8
0x60fef8