gpt4 book ai didi

C++动态大小的静态数组益智游戏

转载 作者:可可西里 更新时间:2023-11-01 18:05:37 26 4
gpt4 key购买 nike

在试图向某人解释为什么 C++ 静态数组不能动态调整大小时,我发现 gcc 不同意我的看法。如果在编译时不知道 array 的维度 argc,下面的代码如何编译?

#include <iostream>
int main(int argc, char* argv[]) {
int array[argc];
for(int i = 0; i < argc; i++) array[i] = argv[i][0];
for(int i = 0; i < argc; i++) std::cout << i << ": " << char(array[i]) << std::endl;
//for(int i = 0; i < 100; i++) { std::cout << i << " "; std::cout.flush(); array[i] = 0; }
return 0;
}

我用 gcc 4.2.1 对此进行了测试,并指定了 -Wall,而没有从编译器那里得到太多的脏外观。如果我取消注释最后一个循环,我在分配给 array[53] 时会遇到段错误。

我之前在 array 的声明之前和之后放置了保护数组,并用零填充它们,确定程序必须破坏其堆栈的一部分,但是 gcc 重新排序了变量堆栈,这样我就无法观察到任何数据损坏。

显然,我并不是要让这段代码“工作”。我只是想了解为什么 gcc 甚至认为它可以编译代码。任何提示或解释将不胜感激。

更新:感谢大家的帮助和快得离谱的回复!

最佳答案

可变长度数组 (VLA) 是 C99 的一部分,并且长期以来一直受到 gcc 的支持:

http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

请注意,在 C90 和 C++ 代码中使用 VLA 是非标准的,但 gcc 作为扩展支持它。

关于C++动态大小的静态数组益智游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6284453/

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