不行。在C++11或C++14中这是不合法的。你正在使用一个被称为可变长数组的扩展(某些编译器提供,但并非全部)。此外,对于大型数组,如数百万个组件的数组,VLA效果不佳,因为实际上你的调用栈是有限制的(例如,仅有一兆字节或几个字节)。 动态内存分配实际上使用类似new(或malloc)的东西。它通过系统调用(例如在Linux上通过mmap,有时会被new调用;在Windows上使用不同的东西)来改变进程的虚拟地址空间。 使用动态内存的好方法(符合标准的方法)是使用一些标准容器,例如std::vector。它的数据将在堆上分配(并由向量的析构函数释放)。