gpt4 book ai didi

c++ - 静电是怎么发生的?

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:26 26 4
gpt4 key购买 nike

需要帮助才能理解以下行为。

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];

输出是$> 1 2 3 4 5 6 7 8 8 10

但是,如果我将变量“a”声明为 auto [如 int a],那么它会在运行时崩溃,这是显而易见的。但为什么它与静态一起工作。另外,如果我运行循环的次数更多(超过 10 次),它就会崩溃。我做到了 12,它崩溃了。此外,在 8 和 10 之间输出 8 而不是 9,这是异常的。请帮忙......

最佳答案

没有显式初始化器的静态变量被初始化为零。

static int a;
int b[a];

b 被初始化为 0 int 的数组。

C++ 不做任何边界检查,它允许您访问超出其边界的数组,但它会调用未定义的行为。


int b[a]; 声明了一个可变长度数组,这只是编译器提供的扩展,不是标准的一部分,因此不可移植。

作为@Als建议,您可以使用 -pedantic 编译器选项进行编译,这会抛出类似

的内容

ISO C++ forbids variable-size array


你似乎想要的只是

static int b[10];

关于c++ - 静电是怎么发生的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6992854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com