【发布时间】:2013-07-07 19:58:14
【问题描述】:
int main(){
int size;
cin >> size;
int myArray[size];
return 0;
}
myArray 是否分配在堆栈上?如果在编译时它的大小是未知的,那怎么办?
顺便说一句,是否可以在堆栈上分配一个动态大小的数组?
这些可能是不好的做法,但我问的是是否允许,而不是是否是好的做法。
【问题讨论】:
int main(){
int size;
cin >> size;
int myArray[size];
return 0;
}
myArray 是否分配在堆栈上?如果在编译时它的大小是未知的,那怎么办?
顺便说一句,是否可以在堆栈上分配一个动态大小的数组?
这些可能是不好的做法,但我问的是是否允许,而不是是否是好的做法。
【问题讨论】:
是的,在哪里/何时允许这样做(在 C++ 中实际上是不允许的,尽管 gcc 允许它作为扩展)myArray 将在堆栈上分配。实现非常简单:选择大小并从堆栈指针中减去它。
如前所述,C++ 目前不允许这样做,但是关于允许它的 dynarray 类的提议已被 C++ 14 的工作文件接受,因此类似的东西(可能)很快就会被允许(如果你的编译器还没有——有些人可能很容易这样做,尽管我从未测试过)。
【讨论】:
是的,这是完全有可能的,尽管刚刚指出这仅在 ISO C99 中可用,并且作为 C++ 中的 GCC 扩展。如果我可以引用GNU website:
在 ISO C99 中允许使用可变长度自动数组,并作为 扩展 GCC 在 C90 模式和 C++ 中接受它们。这些数组是 像任何其他自动数组一样声明,但长度为 不是常量表达式。
【讨论】:
看起来 (cin) 你想使用 C++。如果是这样,也许你应该使用 std::vector。
要设置大小,是的,在堆栈上,请参阅 How to set initial size of std::vector?
【讨论】: