我刚刚在C++中读到了一个C++,它的内容如下:
规则数组的...the大小需要是一个常量表达式,因此它的大小必须在程序设计时确定,然后才能运行.
但是,我只是运行了一个程序来测试这个:
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
int y;
cout << "Enter number of elements of array: ";
cin >> y;
int x[y]; // I declared an array using a variable size instead of a constant expression
x[y-1] = 3;
cout << x[y-1];
return 0;
}...and没有出现错误。那么,本教程所作的陈述是不正确的,还是我误解了它?
发布于 2015-06-14 18:54:36
,不,他们不是,
您在这里看到的是名为“可变长度数组”的GNU扩展 (仍然是基于堆栈的)。
在实际C++语言本身的上下文中,引号是正确的。
如果您使用了正确的编译标志(-Wall -Wextra -pedantic),那么你的编译器会告诉你这个。
发布于 2015-06-14 18:55:52
你的程序不是合法的C++。正在使用的编译器有一个扩展,允许您将非常量表达式用作数组大小。下面是我的编译器不得不说对它的看法:
main.cpp:10:10: warning: variable length arrays are a C99 feature [-Wvla-extension]
int x[y]; // I declared an array using a variable size instead of a constant expression
^此外,这与动态分配无关:您的数组仍然存储在堆栈上,就像任何其他自动分配的对象一样。
发布于 2015-06-14 19:22:05
正如其他人已经指出的,您的编译器正在为此使用扩展。当声明类似于->的数组时
int arr[100];C++将其分配到堆栈中。要在c++中创建动态数组,您必须以以下方式声明它:
int *arr;
arr = new int[n];动态数组使用堆分配。
https://stackoverflow.com/questions/30833225
复制相似问题