我们知道,在C99以前,定义数组时,其数组的大小必须是一个常量,这样能让数组在定义的时候就先分配好内存的大小,然而这出现了一个问题,因为我们在定义数组大小的时候,是不知道我们实际的数据会有多大,如果我们把数组定义大了,那么会造成内存的浪费(如果数组过大,还会溢出,让程序出现意外错误),如果数组定义小了,就会容纳不了我们需要的数据。C99规定,数组的大小可以接受变量,这样就给我们带来了方便。
然而,对于C++,却依旧不支持数组大小的动态定义,虽然现在有些C++的编译器可能会部分兼容了C99标准,但是出于可移植性的考虑,建议还是不要直接使用这种定义。
下面,介绍一种类似的方法,可以让C++中的数组大小“动”起来。
首先,要使用操作符new来申请堆内存空间,它的表达式是 new 数据类型[表达式],这里的表达式可以是常量,也可以是变量,但其值是一个整数。使用这个操作符后,会返回一个相应的数据类型的指针,该指针指向了空间的首元素地址。我们举个例子:
int *pointer;
int n;
cin>>n;
pointer=new int[n];
由于数组名就是指针,这里的pointer就可以认为是一个整型数组。而且在程序运行过程中,还可以根据实际情况来申请内存空间。
这样,我们就间接的实现了C++中数组大小的动态定义。
另外,需要提醒的是:对于我们自己分配的堆内存空间,当我们不用的时候一定记得要“收回”,否则会造成内存泄漏!
阅读(834) | 评论(0) | 转发(0) |