动态数组 - C++快速入门34
2012-07-15 17:30
309 查看
动态数组
让编程改变世界Change the world by program
动态数组
虽然,前边我们讲过的用 new 给基本类型和对象在运行时分配内存,但它们的尺寸在编译时就已经确定下来。因为我们为之申请内存的数据类型在程序里有明确的定义,有明确的单位长度!
可是,总有些时候,必须要等到程序运行时才能确定需要申请多少内存,甚至还需要根据程序的运行情况追加申请更多的内存。
从某种意义上讲,这样的内存管理才是真正的动态!
这一讲中,我们将带大家编写一个程序为一个整数型数组分配内存,实现动态数组。
我们今天要写一个程序,能够在程序运行时让用户输入一个值自行定义数组的长度。
在动手编写这个栗子之前,小甲鱼觉得很有必要给大家复习和进一步讨论下数组和指针的关系。
在即将编写的栗子程序里有一个数组,它的长度在编写这个程序时是未知的,这意味着无法在定义这个数组时在方括号里给出一个准确的数字。
int a[???];
新建一个动态数组
如何解决这个问题呢?不知道鱼油们在脑海里会将数组和什么挂钩呢?
嗯,没错,是指针!
数组名和下标操作符[] 的组合可以被替换成一个指向该数组的基地址的指针和对应的指针运算:
int a[20];
int *x = a;
指针变量 x 指向数组 a 的地址,a[0] 和 *x 都代表数组的第一个元素。
于是,根据指针运算原则,a[1] 等价于 *(x+1)、a[2] 等价于 *(x+2),以此类推。
大家想想,我们把这个逻辑倒过来,会怎样?
嗯,反过来也成立,并且帮了我们一个大忙:把一个数组声明传递给 new 语句将使它返回一个该数组基类型的指针。
把数组下标操作符和该指针变量的名字搭配使用就可以像对待一个数组那样使用 new 语句为这个数组分配的内存块了。
例如:
int *x = new int[10];
可以像对待一个数组那样使用指针变量 x :
x[1] = 45;
x[2] = 8;
当然,也可以用一个变量来保存该数组的元素个数:
int count = 10;
int *x = new int[count];
删除一个动态数组
删除一个动态数组要比删除其他动态数据类型稍微复杂一点。因为用来保存数组地址的变量只是一个简单的指针,所以需要明确地告诉编译器它应该删除一个数组!
具体的做法是在 delete 保留字的后面加上一对方括号:delete [] x;
这样的语法可能大家觉得挺奇葩,但确实顶号用,接下来的栗子给大家做下演示!
[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://urlxf.qq.com/?jAfEjue']视频下载[/Downlink]
[Downlink href='http://kuai.xunlei.com/d/LABVHGPZDBIH']备胎下载[/Downlink]
相关文章推荐
- 动态数组 - C++快速入门34
- 《算法笔记》2.5小节——C/C++快速入门->数组
- 《算法笔记》2.5小节——C/C++快速入门->数组
- 《算法笔记》2.5小节——C/C++快速入门->数组
- C++快速入门 (五) 数组 和 字符串
- 《算法笔记》2.5小节——C/C++快速入门->数组
- C++程序员学习android开发快速入门指引
- C/C++ 数组排序(平均时间复杂度 O(nlogn))归并、快速、堆、希尔之快速排序
- Solidity基础入门知识(六)动态大小字节数组
- 模拟c++容器vector写的动态数组
- 复杂的数据类型2 - C++快速入门08
- C++开辟动态一维、二维、多维数组
- C++动态数组,多重指针问题
- C++动态数组的实现
- Microsoft Visual C++ 2005快速入门
- C++ STL Stack 快速入门
- C++ 动态建立数组
- c++动态数组(二)之allocator类
- 错误处理和调试2 - C++快速入门31
- C++程序员学习android开发快速入门指引