学科分类
目录
C语言

变长数组

变长数组是C99标准提出的概念,它是指数组的大小可以是变量,而不用必须是常量。示例代码如下:

int n = 10;   //定义整型变量
int arr[n];   //定义数组arr,数组大小为n

上述代码中,首先定义了一个整型变量n,其大小为10,然后定义了一个int类型数组,使用变量n标识数组大小。如果需要更改数组的大小,就可以通过改变变量n的大小实现。需要注意的是,变长数组只是在程序运行前可以改变其大小,在程序运行过程中其长度还是固定的。

使用变量定义的数组,数组不能在定义时初始化,只能在定义之后初始化,如果在定义时初始化变长数组,编译器会报错:变长数组无法完成初始化。示例代码如下:

int n = 10;
int arr[n];
//方式一:
memset(arr,0,sizeof(arr));   //对数组进行初始化
// 方式二:
for (int i = 0; i < n; i++)  //初始化变长数组
  arr[i] = i;
//int arr[n] = {1,2,3,4,5,6}; //变长数组在定义时初始化,错误

需要注意的是,不同的编译器对使用变量定义的变长数组的支持程度也不同,Visual Studio2019对变量定义的变长数组并不支持,读者在使用Visual Studio2019定义变长数组时会提示“arr:未知大小”的错误信息,而使用Dev-C++、gcc等编译器可以通过编译。

除了使用变量定义变长数组,还可以使用宏定义变长数组,示例代码如下:

#define N 10    //定义宏N
int arr[N];    //定义数组arr,其大小为N

上述代码中,使用#define定义了一个宏N,其值为10,接着定义了int类型的数组arr,数组大小为N。当需要改变数组大小时,只需要改变N的值即可。#define是宏定义标识,宏定义将会在第10章讲解,这里读者只需要知道利用宏可以定义变长数组即可。

与普通变量定义变长数组不同的是,使用宏定义变长数组,所有编译器均支持。

点击此处
隐藏目录