繁体   English   中英

如果在编译时未知其大小,是否可以在堆栈上创建一个数组?

[英]Is it possible to create an array on the stack, if its size is unknown at compile time?

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

myArray是否分配在堆栈上? 如果在编译时未知大小,怎么办?

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

这些做法可能不好,但我要问的是是否允许这样做,而不是如果不是好的做法。

是的,在允许的位置/时间(虽然gcc允许它作为扩展,但实际上在C ++中是不允许的) myArray将分配在堆栈上。 实现非常简单:选择大小并将其从堆栈指针中减去。

如前所述,C ++目前不允许这样做,但是有关dynarray类的提议已被C ++ 14的工作文件接受,因此(可能)很快会允许类似的操作(如果您的编译器不允许这样做)。已经-有些可能很容易这样做,尽管我从未对此进行过测试)。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM