C语言C99中的变长数组详解

目录

前言

一、引入

二、优点

三、变长数组在vs中的遗憾

总结


前言

之前我们讲解了C语言中的数组,其实在C99标准中,C语言数组还有一个扩展叫变长数组。


一、引入

在C99标准之前,C语⾔在创建数组的时候,数组⼤⼩的指定只能使⽤常量、常量表达式,或者如果我们初始化数据的话,可以省略数组⼤⼩。

如:

cpp 复制代码
int arr1[10];
int arr2[3+5];
int arr3[] = {1,2,3};

这样的语法限制,让我们创建数组就不够灵活,有时候数组⼤了浪费空间,有时候数组⼜⼩了不够⽤的。

C99中给⼀个变⻓数组(variable-length array,简称 VLA) 的新特性,允许我们可以使⽤变量指定数组⼤⼩。

请看下⾯的代码:

cpp 复制代码
int n = a+b;
int arr[n];

上⾯⽰例中,数组 arr 就是变⻓数组 ,因为它的⻓度取决于变量 n 的值,编译器没法事先确定,只

有运⾏时才能知道 n 是多少。

变⻓数组的根本特征,就是数组⻓度只有运⾏时才能确定,所以变⻓数组不能初始化

二、优点

它的好处是程序员不必在开发时,随意为数组指定⼀个估计的⻓度,程序可以在运⾏时为数组分配精确的⻓度。有⼀个⽐较迷惑的点,变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。数组的⼤⼩⼀旦确定就不能再变化了。

三、变长数组在vs中的遗憾

遗憾的是在VS2022上,虽然⽀持⼤部分C99的语法,没有⽀持C99中的变⻓数组,没法测试;下⾯是我在gcc编译器上测试;

变长数组在vs2022上报错:

这里给大家推荐一个C语言的编译器---小熊猫c++,它就是用gcc编译器的,小编也专门出了几篇文章介绍并安装这个编译器,大家可以去看看

以下就是我在小熊猫c++中给大家测试的代码:

cpp 复制代码
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);//根据输⼊数值确定数组的⼤⼩
	int arr[n];
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

运行结果:

小熊猫c++的编译运行,小编在**【教你如何安装并使用小熊猫c++】**都提及了,有需求的同学可以自行浏览。


总结

今天给老铁们讲了C语言中C99标准的变长数组,也给大家介绍了一种编译器,身为未来的程序员,我们可不能只会一种VS,哈哈哈!

相关推荐
HugoStudio_SWAN8 小时前
洛谷 B4500 / B4449 / B3843 凯撒密码、密码强度与密码合规——加密与安全的三道门
c++·学习·程序人生·算法·安全
雾里看山9 小时前
源码目录、构建目录与 out-of-source build
c++·软件构建·cmake
渡我白衣11 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
天下无敌笨笨熊11 小时前
C#Modbus串口开发心得
开发语言·c#
电商API_1800790524711 小时前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
zzzll111111 小时前
深度剖析:HashMap 并发死循环与 ConcurrentHashMap 两代演进全解
java·开发语言
如意猴11 小时前
【C++】001--C++入门(1)
开发语言·c++
hetao173383711 小时前
2026-09-01~09-04 hetao1733837 的刷题记录
c++·算法
传奇开心果编程11 小时前
【Rust入门知识点学与练】第10课:Option 和 Result(错误处理入门)
开发语言·学习·rust
2601_9622959911 小时前
嵌入式开发语言用哪个最好,C,python或者其他
c语言·python·嵌入式开发·开发效率·系统资源