ConstStar
发布于 2022-10-19 / 135 阅读 / 0 评论 / 0 点赞

C/C++ VLA可变数组

引言

今天我同学写了一个很奇怪的代码,而且居然正常运行

#include <iostream>

using namespace std;

int main(){

    int n;
    cin>>n;

    int arr[n];
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }

    for(int i=0;i<n;i++){
        cout<<arr[i]<<" ";
    }
    return 0;
}

当时十分纳闷,数组的长度不是必须是常量吗,难道我学了假的C++。
于是上网查新版本的特性,都没有这一点,最后才发现C/C++是支持VLA。

VLA

VLA就是variable-length array,也就是变长数组。

  • C90标准中并不支持VLA,C99开始支持VLA
  • VLA必须是自动存储类型
  • 变长数组分配在栈中
  • 有些编译器不支持

建议

不推荐使用VLA,因为毕竟有些编译器不支持,刷Leetcode用用就行,在项目里建议使用Vector等容器。


评论