指针
指针(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),能够修改原始数据
如果你想修改一个东西,需要不是这个东西的值,需要的是它的指针