This question already has answers here:
In C++ books, array bound must be constant expression, but why the following code works?

(2 个回答)


8年前关闭。




我从这里阅读了这一段:http://www.cplusplus.com/doc/tutorial/dynamic/



但是我的这段代码工作得很好:
int number;
cin>>number;
int myArray[number];

cout<<sizeof(myArray)/sizeof(myArray[0])<<endl;
cout<<sizeof(myArray)<<endl;

这是否意味着数组是在动态内存中创建的?或者它是在静态内存中创建的,但它的大小仍然在运行时确定?

最佳答案

正如我在评论中指出的那样,但这里有更多细节。

在标准 C++ 中,必须在编译时知道数组的大小。在您的示例中,情况并非如此。您的代码编译是因为您(大概)使用启用了 variable length array 扩展的 gcc。

正确设置警告级别将阻止此代码编译。

关于c++ - 静态内存中数组的大小可以在 C++ 运行时更改吗?怎么来的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13545489/

10-12 16:01