复杂的数据类型4 – C++快速入门10

复杂的数据类型4

让编程改变世界

Change the world by program

指针和数组

在此之前关于地址和指针的例子中,我们使用的是标量类型:整数、实数和字符。

当我们遇到一个标量类型的变量时,我们创建一个与其类型相同的指针来存放它的地址。可是,当我们遇到的是数组时,做法有所改变吗?

这是小甲鱼这一节课想跟大家一起探讨的问题。

我们知道,计算机把数组是以一组连续的内存块保存的,例如:int myArray[3] = {1, 2, 3};

在内存中是类似于这种形式存储:

宽客网,量化投资,宽客俱乐部

在内存中是类似于这种形式存储

这就说明了数组拥有很多个地址,每个地址对应着一个元素。可能你会觉得要用指针指向一个数组,需要用到很多指针变量?

其实在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. 重载

对于上边的例子使用模板进行修改:

  1. 泛型程序设计

小小总结

指针运算的重要性在高级和抽象的程序设计工作中体现得更加明显(如刚才的泛型设计)。

就目前而言,大家只需要记住数组的名字同时也是一个指向其第一个元素(基地址)的指针。

数组可以是任何一种数据类型,这意味着我们完全可以创建一个以指针为元素的数组(大家可以课后自己实践一下,后边我们也会详细讲解)。

视频下载

备用视频下载
技术, IT技术, CPP, 视频教程

风险提示及免责条款

市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部