首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组不是在C++中动态分配的吗?

问数组不是在C++中动态分配的吗?
EN

Stack Overflow用户
提问于 2015-06-14 18:50:21
回答 4查看 138关注 0票数 0

我刚刚在C++中读到了一个C++,它的内容如下:

规则数组的...the大小需要是一个常量表达式,因此它的大小必须在程序设计时确定,然后才能运行.

但是,我只是运行了一个程序来测试这个:

代码语言:javascript
复制
#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没有出现错误。那么,本教程所作的陈述是不正确的,还是我误解了它?

EN

回答 4

Stack Overflow用户

发布于 2015-06-14 18:54:36

,不,他们不是,

您在这里看到的是名为“可变长度数组”的GNU扩展 (仍然是基于堆栈的)。

在实际C++语言本身的上下文中,引号是正确的。

如果您使用了正确的编译标志(-Wall -Wextra -pedantic),那么你的编译器会告诉你这个。

票数 3
EN

Stack Overflow用户

发布于 2015-06-14 18:55:52

你的程序不是合法的C++。正在使用的编译器有一个扩展,允许您将非常量表达式用作数组大小。下面是我的编译器不得不说对它的看法:

代码语言:javascript
复制
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
         ^

此外,这与动态分配无关:您的数组仍然存储在堆栈上,就像任何其他自动分配的对象一样。

票数 2
EN

Stack Overflow用户

发布于 2015-06-14 19:22:05

正如其他人已经指出的,您的编译器正在为此使用扩展。当声明类似于->的数组时

代码语言:javascript
复制
int arr[100];

C++将其分配到堆栈中。要在c++中创建动态数组,您必须以以下方式声明它:

代码语言:javascript
复制
int *arr;
arr = new int[n];

动态数组使用堆分配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30833225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档