复杂的数据类型4 - C++快速入门10
2011-11-26 21:43
169 查看
复杂的数据类型4
让编程改变世界Change the world by program
指针和数组
在此之前关于地址和指针的例子中,我们使用的是标量类型:整数、实数和字符。当我们遇到一个标量类型的变量时,我们创建一个与其类型相同的指针来存放它的地址。可是,当我们遇到的是数组时,做法有所改变吗?
这是小甲鱼这一节课想跟大家一起探讨的问题。
我们知道,计算机把数组是以一组连续的内存块保存的,例如:int myArray[3] = {1, 2, 3};
在内存中是类似于这种形式存储:
[caption id="attachment_458" align="aligncenter" width="300"]
在内存中是类似于这种形式存储[/caption]
这就说明了数组拥有很多个地址,每个地址对应着一个元素。可能你会觉得要用指针指向一个数组,需要用到很多指针变量?
其实在C/C++中,事实远没有想象那么困难。数组的名字其实也是一个指针(指向数组的基地址,就是第一个元素的地址)。
就刚才的例子,以下两句做同样的事情:
int *ptr1 = &myArray[0];
int *ptr2 = myArray;
我们轻易的将数组的基地址用指针变量保存起来,那我们接着讨论第二个问题:如果我想要通过指针访问其他数组元素,应该怎么办?
试试:ptr1++;
指针运算的奇妙之处就在于,以上并不将地址值简单+1处理,它是按照指向的数组的数据类型来递增的,也就是 +sizeof(int)。
我们用实例来演示一下这个特性:example(源代码下载)
思考
如有:int Array[5] = {1, 2, 3, 4, 5};
int *ptr = Array;
则
*ptr + 1;
*(ptr + 1);
两者有何区别,大家课后考虑一下?
数组和指针的应用举例
1. 重载
对于上边的例子使用模板进行修改:2. 泛型程序设计
小小总结
指针运算的重要性在高级和抽象的程序设计工作中体现得更加明显(如刚才的泛型设计)。就目前而言,大家只需要记住数组的名字同时也是一个指向其第一个元素(基地址)的指针。
数组可以是任何一种数据类型,这意味着我们完全可以创建一个以指针为元素的数组(大家可以课后自己实践一下,后边我们也会详细讲解)。
[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://urlxf.qq.com/?bqA3uy7']视频下载[/Downlink]
[Downlink href='http://kuai.xunlei.com/d/LEBXRLNWSDLL']备胎下载[/Downlink]
相关文章推荐
- 复杂的数据类型4 - C++快速入门10
- 复杂的数据类型2 - C++快速入门08
- 复杂的数据类型3 - C++快速入门09
- 复杂的数据类型2 - C++快速入门08
- 复杂的数据类型3 - C++快速入门09
- 快速入门C++ 03(复杂数据类型)
- 复杂的数据类型5 - C++快速入门11
- 复杂的数据类型5 - C++快速入门11
- 复杂的数据类型1 - C++快速入门07
- 复杂的数据类型1 - C++快速入门07
- C++ Primer快速入门之四:变量和数据类型
- C++入门(6):复杂的数据类型
- MySQL快速入门04----数据类型
- C++入门(1)简单变量和数据类型
- c++数据类型及复杂声明推演
- opencl 初学笔记2- opencl快速入门教程【数据类型规范 , 命名原则】
- C语言快速入门之数据类型与存储
- 《数据挖掘概念与技术》学习笔记第9-10章_复杂数据类型的挖掘+数据挖掘的应用和发展趋势(9/10)+(10/10)
- Python学习笔记(二):语句、数据类型(快速入门篇)
- go语言快速入门:数据类型使用例(5)