Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;本地数组和成员数组在MinGW上被分配到相同的内存位置 我正在做一些实验来解决一个练习题,从C++程序设计语言(第四版),Stroustrup。_C++_Arrays_Mingw - Fatal编程技术网

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