598-Golang的指针

指针

指针(pointer)是存储一个地址

地址:0x16F9 22D9

&取址操作
&xx => xx所在的内存地址

内存的结构:
在这里插入图片描述
计算机的内存很大,所以指针(地址)是以16进制表现出来的
在这里插入图片描述
我们来打印一下变量的地址
在这里插入图片描述

在这里插入图片描述
%d是纯数字,十进制的输出
我们用%p,十六进制输出

在这里插入图片描述
在这里插入图片描述
我们发现,每次输出的地址都是一样的
我们可对任何东西取地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
a和b在内存中是否是挨着的,每次输出是否会变化,都取决于系统分配
在这里插入图片描述
在这里插入图片描述
b是指针类型
在这里插入图片描述
a的指针不能赋值给int
在这里插入图片描述

var a int     //a是整数
var b *int    //b是int类型指针(b存的是指向一个int变量的地址)

在这里插入图片描述
在这里插入图片描述
现在b打印出来的是地址
在这里插入图片描述
在这里插入图片描述
我们现在想看看b的地址指向的东西是什么
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
a的地址所指向的就是a本身
在这里插入图片描述

用指针进行操作

指针本身不存储数据的——指针只是一个地址
修改指针所指向的位置,原始数据就变了
a:=5
b:=a

b=99
a=>5

------

a:=5
b:=&a

*b=99
//a=>99

在这里插入图片描述
在这里插入图片描述
因为88赋值给了b指向的位置,b指向的是a啊

所有内存都可读可写,编译器编译如果检测到有const,
就不让取地址,防止你间接修改const修饰的值
注意:const不能取址——导致常量被修改

在这里插入图片描述

在这里插入图片描述

如果我们不使用指针,两个变量进行普通的初始化,然后修改

在这里插入图片描述

在这里插入图片描述
接下来我们对b进行修改
在这里插入图片描述
在这里插入图片描述
a和b是两个空间,只是普通的赋值
在这里插入图片描述
如果我们使用指针,两个变量进行初始化,然后修改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
b只是指针,本来就只有a这个空间

指针总结


指针:
本质上是一个地址,通过"修改指针指向的东西"(*ptr=xx),能够修改原始数据

如果你想修改一个东西,需要不是这个东西的值,需要的是它的指针

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值