我们可以给静态数组的大小一个变量

mai*_*ved 9 c c++

你好每一个我想问我已经读过我们只能通过使用指针和使用malloc或newlike来声明动态数组

int * array = new int[strlen(argv[2])];
Run Code Online (Sandbox Code Playgroud)

但我写了

int array[strlen(argv[2])];
Run Code Online (Sandbox Code Playgroud)

它没有给我任何错误

我已经读过静态数组只能通过给出常量数组大小来声明,但在这里我给了静态数组一个可变大小

为什么这么谢谢


是否可以安全使用,或者有可能在任何后期阶段它会产生问题我使用gcc linux

Ker*_* SB 15

你所拥有的是一个可变长度数组(VLA),它不是C++的一部分,尽管它 C99的一部分.许多编译器都将此功能作为扩展.

即使是非常新的C++ 11也不包含VLA,因为整个概念不适合C++ 11的高级类型系统(例如,是decltype(array)什么?),C++提供开箱即用的库运行时大小的数组的解决方案,功能更强大(如std::vector).

在GCC中,编译-std=c++98/c++03/c++0x-pedantic会给你一个警告.

  • @mainajaved:这是自1999年以来C语言的最新ISO标准. (2认同)

los*_*yzd 5

C99支持variable length array,它在c99中定义,第6.7.5.2节.