Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18409
  • 博文数量: 12
  • 博客积分: 266
  • 博客等级: 二等列兵
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-07 10:14
文章分类

全部博文(12)

文章存档

2012年(4)

2011年(8)

我的朋友

分类: C/C++

2011-04-11 10:46:30

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