什么是数组尺寸?
在C++中数组尺寸是指数组的长度,也就是数组中元素的个数。数组可以理解为是一组相同类型的元素的集合,这些元素在内存中被依次存放。
定义数组时必须指定数组的长度,因为这个长度决定了编译器为这个数组在内存中开辟多少空间。如果没有指定长度,编译器就不知道要为这个数组开辟多少内存空间,当程序运行时就会出现问题。
什么是数组尺寸必须在定义时指定的错误?
数组尺寸必须在定义时指定的错误是指在定义数组时没有指定数组的长度,而在后面的代码中又尝试使用该数组。
出现错误的代码
#include
using namespace std;
int main()
{
int arr[]; //没有定义数组的长度
arr[0] = 1; //尝试使用该数组
return 0;
}
错误信息
在Visual Studio 2019中编译上述代码会得到以下错误信息:
error C2466: 无法分配空间为 0 的数组
error C2133: “arr”: 未知大小
在gcc和Clang编译器中编译上述代码会得到以下错误信息:
error: array size missing in 'arr'
int arr[];
^~~
如何处理数组尺寸必须在定义时指定的错误?
解决方法一:给数组指定长度
最简单的方法就是在定义数组时直接给数组指定一个长度。
#include
using namespace std;
int main()
{
int arr[5]; //定义一个长度为5的数组
arr[0] = 1; //使用该数组
return 0;
}
上述代码定义了一个长度为5的数组,程序可以正常运行。
解决方法二:使用动态内存分配
还可以使用动态内存分配的方法,可以在程序运行时根据需要动态地为数组分配内存。
#include
using namespace std;
int main()
{
int n;
cout << "请输入数组的长度:";
cin >> n;
int* arr = new int[n]; //动态分配n个整型变量的内存空间
arr[0] = 1; //使用该数组
delete[] arr; //释放内存空间
return 0;
}
上述代码使用了new运算符动态地为数组分配内存,程序可以根据用户输入的长度动态分配内存。
解决方法三:使用标准库容器
使用标准库容器也可以解决数组尺寸必须在定义时指定的错误。容器可以自动调整大小,不需要手动指定数组长度。
#include
#include
using namespace std;
int main()
{
vector arr; //定义一个vector容器
arr.push_back(1); //向容器中添加元素
return 0;
}
上述代码定义了一个vector容器,程序可以向其中动态添加元素。
小结
在C++中数组尺寸必须在定义时指定,否则会出现数组尺寸必须在定义时指定的错误。可以通过给数组指定长度、使用动态内存分配或者使用标准库容器的方式解决这个问题。