变长数组
变长数组是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章讲解,这里读者只需要知道利用宏可以定义变长数组即可。
与普通变量定义变长数组不同的是,使用宏定义变长数组,所有编译器均支持。