为了账号安全,请及时绑定邮箱和手机立即绑定

允许在运行时不进行动态分配的数组大小?

允许在运行时不进行动态分配的数组大小?

C++
慕的地6264312 2019-06-19 11:26:59
允许在运行时不进行动态分配的数组大小?我使用C+已经有几年了,今天我看到了一些代码,但是这怎么可能是完全合法的呢?int main(int argc, char **argv){     size_t size;     cin >> size;     int array[size];     for(size_t i = 0; i < size; i++)     {         array[i] = i;         cout << i << endl;     }     return 0;}GCC主编。如何在运行时不使用new或malloc?为了再次检查,我搜索了一些与我类似的代码,声称它们存在存储大小错误。即使是Deitel的C+如何在常见编程错误4.5下编程p.261状态:只能使用常量来声明自动数组和静态数组的大小。照亮我。
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

这在C99中是有效的。

C99标准支持堆栈上的可变大小数组。可能您的编译器也选择了支持这个构造。

请注意,这与mallocnewgcc分配堆栈上的数组,就像int array[100]通过调整堆栈指针。没有完成堆分配。就像_alloca.


查看完整回答
反对 回复 2019-06-19
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

这被称为VLA(可变长度数组)。它在C99中是标准的,但是GCC允许它在c+代码中作为扩展。如果您希望它拒绝代码,请尝试使用-std=standard-ansi-pedantic各种选择。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 460 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信