pb send返回的是地址_C++ 指针:剑指内存,数据地址

13.指针及用法

c205f4cc2b97a0cb869aaac5db550438.png

13.1 什么是指针

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

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

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

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

13.2 获取地址数据

声明指针很容易:

4bf1c664cf3744a55355c9f8f9f00f70.png

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

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

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

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

cbed23da4f4c4cd3b4c578f461057705.png

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

13.3 访问指针数据

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

5a884c6e49485693df15a736abfc5478.png

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

13.4指针的用法

1.指向变量

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

7d0fa89bf456ba1a9190cd78a629e820.png

2.指向数组

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

8a836298a1c231b83b101644db4dc486.png

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

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

d329dbf68d9b7061461775b4c66a96bc.png

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

3.指向函数

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

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

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

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

000dc5ddacf4c14e7d0c77645a70c46c.png

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

4.函数形参

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

f0dd30917c97e2c3a05df08d896ee632.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值