首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C+指针:剑指内存,数据地址

13.1 什么是指针

如果你想掌握更高深的编程技术,指针是一定要学习的。

在前面变量的学习中,我们说变量代表一个内存单元,要想访问这个内存单元的数据只能指名道姓的使用变量名。

系统为变量分配的内存单元是拥有一个地址数据的,这个地址数据如果非要用一个容器来保存,那只能是一个特殊的变量:指针。

什么是指针呢?指针是一个特殊的变量,里面保存是一个内存地址数据。

13.2 获取地址数据

声明指针很容易:

上图中我们声明了4个指针,每一个指针的类型都不相同,并且用0初始化了每个指针。27行中指针名为pi,指针类型为 int *,你没看错,在声明指针时指针名前要加个*号,而且必不可少。

没有人会声明一个指针而仅仅赋值为0的,声明指针的目的一定是为了保存某个内存空间的地址。一旦你声明了某个类型的指针就可以使用了,问题是如何得到内存地址呢?

第15行我们声明了一个int类型的变量i,如果我们想得到这个变量的地址,只需要这样操作即可:&i。&是一个运算符,是用来得到地址的一个特殊运算符。

现在可以把i的地址保存起来了,这里只能在上图中的4个指针中选择pi来保存变量i的地址。同样可以通过&分别取得其他变量f、b、c的地址,并分别保存在pf、pb、pc指针中。

在上图的例子中你应该已经发现了变量i与指针pi,变量f与指针pf,变量b与指针pb,变量c与指针pc是有一定内在联系的。这个规律就是:int类型变量的地址必须保存在int*类型的指针中,其他变量同理。

13.3 访问指针数据

在把一个变量的内存地址保存在一个指针后,如何通过这个指针获取变量的数据呢?

方法是在指针前加*:解除对指针的引用。第26行 *pi 就可以得到指针指向的内存数据。

13.4指针的用法

1.指向变量

最常见的指针用法是让指针指向某一个变量:

2.指向数组

指针除了可以指向一个变量外,也可以指向一个数组。只要把数组的内存地址保存在指针中即可。

上图中有3个不同类型的指针都指向某一个类型的数组,这里要注意的是:指针可以指向的数组与数组本身的类型有很大关系。得到一个数组的地址并不需要&,数组名就可以表示数组的地址,所以可以把数组名赋值给指针。

如果想通过指针循环输出数组内容可以如下图实现:

上图中循环体中的i代表数组元素的下标,数组名+ i得到的是数组中下标为i的元素的地址,然后解除引用:*(数组名+i),就得到了这个元素的数据了。

3.指向函数

指针还可以指向一个函数。

首先要声明一个函数指针。注意:函数指针的格式要与它指向的函数匹配:返回值类型(*函数指针)(函数参数列表)。

其次,把一个函数名赋值给函数指针。

最后就可以传递参数给函数指针并通过指针来调用函数了。

上图中真正能够体现函数指针威力的在第29行,函数指针可以指向任意一个具有相同返回值和形参的其他函数。函数指针的灵活性让它在编程中得以大展身手。

4.函数形参

指针的另一个重要用法是指针用做函数的形参。

声明函数的形参为指针,是C++编程中普遍的做法。函数的指针参数同引用参数一样能够避免一些额外的性能开销。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191018A0MCXC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券