需要帮助以了解以下行为.
static int a;
int b[a];
for(int i=0; i<10; i++)
b[i] = i+1;
for(int i=0; i<10; i++)
cout << " " << b[i];
Run Code Online (Sandbox Code Playgroud)
输出为$> 1 2 3 4 5 6 7 8 8 10
但是,如果我将变量'a'声明为auto [like int a],那么它会在运行时崩溃,这很明显.但为什么它与静态一起工作.此外,如果我运行循环更多的时间(高于10)它崩溃.我做了12并且它崩溃了.此外,输出8在8和10之间而不是9,这是异常的.请帮忙.....
没有显式初始值设定项的静态变量初始化为零.
static int a;
int b[a];
Run Code Online (Sandbox Code Playgroud)
b被初始化为0的数组int.
C++不进行任何边界检查,它允许您在其边界外访问数组,但它会调用未定义的行为.
int b[a]; 声明一个可变长度数组,这只是编译器提供的扩展,这不是标准的一部分,因此不可移植.
正如@Als建议的那样,您可以使用-pedantic编译器选项进行编译,这会产生类似的东西
ISO C++禁止可变大小的数组
你似乎想要的只是
static int b[10];
Run Code Online (Sandbox Code Playgroud)