变长数组(variable-length array)

C99引入变长数组(VLA),允许在运行时动态指定数组大小,提供更大的灵活性但不支持VS2022。注意运行时检查以避免内存问题。
摘要由CSDN通过智能技术生成

       众所周知,在C99标准之前,C语言创建数组的时候,数组大小的指定只能使用常量,常量表达式,或者我们初始化数据的时候可以省略数组大小。

比如:

int arr1[10];
int arr2[3+5];
int arr3[]={1,2,3,4};

       有这样的限制,我们操作起来就不咋方便,sometime数组大了浪费空间,sometime数组又小了不够用,这样就显得我们很呆。

       所以为了让我们不那么呆,在C99中给了一个变长数组(VLA)新特性,允许我们使用变量指定数组大小。

举个🌰:

int n=a+b;
int arr[n];

       像栗子里的代码一样数组 arr 就是一个变长数组,它的大小由变量 n 来决定,这个变量是未可知的数据,只有代码运行起来才能知道。

        So,变长数组的根本特征是其大小可以在运行时确定,而不是在编译时确定。这意味着,变长数组的大小可以是任意合法的整数表达式,包括常量、变量、甚至是运算表达式。

与普通数组相比,变长数组具有以下几个特点:

  • 大小可变:变长数组的大小不需要在编译时确定,而是在运行时确定。这使得变长数组可以根据程序的需求动态调整大小。
  • 局部作用域:变长数组的作用域限于其所在的块(函数、代码块等)内部。超出作用域后,变长数组将被销毁。
  • 堆栈分配:变长数组的空间是在栈上分配的,而不是在静态存储区或堆上分配。这意味着变长数组的生命周期与其所在的作用域一致。
  • 不支持初始化器:由于变长数组的大小是在运行时确定的,因此无法在声明时使用初始化器对其进行初始化。只能通过后续的赋值操作来给变长数组赋值。

       因此需要注意是由于变长数组的大小是在运行时确定的,我们一定要对变长数组进行细致检查,以防止访问越界或者申请过大的内存空间,出现一堆bug。

       不过遗憾的是vs2022中对于C99变长数组并不支持,所以俺没法给你们测试一下,如果感兴趣大家可以去找编译器测试一下,相对于普通数组,变长数组的可玩性还是很高的。

       就到这了0.0 bye~

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值