指针与地址

Int *iptr;//声明一个整型的指针,指针名称为iptr,int 表示整型,*表示指针

(因为int* iptr,int *iptr和int * iptr的含义相同,因此为了方便,我们不妨都以Int*来表示指针)

Int a;

a=12;

Iptr=&a;//指针变量用于存放地址,把a的地址放在iptr指针中,或者说指针指向这个内存的地址

cout<<*iptr;//输出为12,这里的*iptr中的“*”是间接引用操作符,意为输出指针iptr指向的内容;

!!!“*”符号的意思是取得一个指针所指向的对象,也就是如果一个指针保存着一个内存地址,那么它就返回那个地址的对象

(当然,我是这样记忆这个知识点的,*Iptr的类型是int ,所以输出的是一个int型的数据,也就是整型指针指向的内容)

*iptr=14;//改变了指针的内容,而此时的指针存放的地址为a的地址,因此a的值改变

cout<<a;//这里输出为14

打个比方,整个计算机的内存可以视为一个仓库,仓库里有很多不同类型的抽屉(double,int char,float...),我们声明的指针是一把智能钥匙,可以随机输入一个抽屉号码(即指针指向)

Int a;//随机命名一个空的抽屉为a

a=12;//把12这个数据(可视为物品)放进a抽屉中

Int* p=&a;//把a抽屉的地址输入到智能钥匙p中

cout<<p;//输出a的地址,类似于0x70fe14这种

cout<<*p;//*p即a抽屉中的物品,这步操作(*p,即间接引用)可以让我们看到a中的内容

a=23;//这是把a中的12换成了23

cout<<*p;//此时a中的物品为23

同样的,改变*p也可以达到相同的效果,如:

*p=23;

cout<<a;//结果也是23

Int b=100;

p=&b;

cout<<*p;//输出为100,因为此时我们已经在智能钥匙p中输入了b的地址,因此*p查看的是b存放的内容

 

上面说到指针变量是用于存放地址的,存放谁的地址呢,当然是变量的地址,那么指针变量作为一个变量自然也有自己的地址,我们可以理解为智能钥匙也是一种物品,也会有类型(整型指针,浮点型指针,字符指针等等),因此智能钥匙也是可以放进抽屉里的,所以就有指向指针的指针。

Int** q=&p;//这是一个指向p指针的q指针,也就是把p指针的地址存到了q中,在智能钥匙q中输入了p的地址

我们由外而内剖析:

cout<<**q;//输出应该为100,因为**q前面是int ,因此输出的应该是个整型数,也就是

q——>p——>b=100

cout<<*q;//*q的前面是int*,所以应该输出一个地址,那么是谁的地址呢?我们可以反向思考,前面说过*是取得一个指针所指向的对象,既然**q是b=100,那么*q肯定是b的地址

cout<<q;//同样是输出地址,这个又是谁的地址呢?显然是存放b地址的智能钥匙p的地址

总结:

q是p的地址。*q是存放在p这里的地址,也就是b的地址,**q是b地址对应的内存空间中的对象。

Int b=13;

Int*m=&b;

*q=m;

q——>p——>b=13而不是q——>m——>b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值