1
int main(){
    int size;
    cin >> size;
    int myArray[size];
    return 0;
}

myArray在栈上分配的吗?如果在编译时它的大小是未知的,那怎么办?

顺便说一句,是否可以在堆栈上分配一个动态大小的数组?

这些可能是不好的做法,但我问的是它是否允许,而不是它是否是好的做法。

4

3 回答 3

4

是的,在哪里/何时允许(在 C++ 中实际上不允许,尽管 gcc 允许它作为扩展)myArray将在堆栈上分配。实现非常简单:选择大小并从堆栈指针中减去它。

如前所述,C++ 目前不允许这样做,但是一个dynarray允许它的类的提议已被 C++ 14 的工作文件接受,因此(可能)很快就会允许类似的东西(如果你的编译器还没有- 有些人可能很容易这样做,尽管我从未测试过)。

于 2013-07-10T02:04:15.597 回答
2

是的,这是完全有可能的,尽管刚刚指出这仅在 ISO C99 中可用,并且作为 C++ 中的 GCC 扩展。如果我可以引用GNU 网站

ISO C99 允许可变长度自动数组,作为扩展,GCC 在 C90 模式和 C++ 中接受它们。这些数组的声明与任何其他自动数组一样,但其长度不是常量表达式。

于 2013-07-10T02:05:52.513 回答
0

它看起来 (cin) 就像您想使用 C++。如果是这样,也许你应该使用 std::vector。

要设置大小,是的,在堆栈上,请参阅 如何设置 std::vector 的初始大小?

于 2013-07-10T02:10:48.933 回答