其他分享
首页 > 其他分享> > 598-Golang的指针

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),能够修改原始数据

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

在这里插入图片描述

标签:指向,int,598,Golang,修改,地址,内存,指针
来源: https://blog.csdn.net/LINZEYU666/article/details/120383597