1).我们在代码中申明一个变量,变量里面存的就是值,也叫值类型
package main
import "fmt"
func main() {
var i int = 10
fmt.Println("i的值=",i)
}
说明:他在内存中怎么存的呢

2)获取变量的地址,用&,比如说获取上面的 var i int ,获取i的地址,就是&i

说明:
1,i在内存中的地址就是0xc04202e080,i也就是0xc04202e080,
2.可以理解为,i是我们代码中的写的,我们认识,但是在内存中生成存储空间的时候,内存不认识,所以将i编译成内存认识的,所以就编程了0xc04202e080这种内存认识的地址
3)申明指针类型的变量,指针变量中存的是某一个变量的地址,这个地址指向内存中存的正在的值
package main
import "fmt"
func main() {
var i int = 10
fmt.Println("i的地址=",&i)
//prt 是一个指针变量
//prt 的指针类型是 *int
//prt 指针变量保存的是变量i的地址,变量i的地址怎么获取,使用&i
//申明一个指针变量
var prt *int = &i
fmt.Println("prt 指针变量保存的值=",prt)
}
说明:指针变量内存示意图

4)怎么获取指针变量所指向的值呢,使用 *,例如:var prt *int 使用*prt获取prt指向的值
package main
import "fmt"
func main (){
var i int = 10
var prt *int = &i
fmt.Printf("prt指针变量指向的值=",*prt)
//打印出来的值是10
}
5:)案例演示
package main
import "fmt"
func main() {
var a int = 300 //申明a变量,值是300
var b int = 400 //申明b变量,值是400
var prt *int = &a //申明prt指针变量,只是变量a的地址
//获取指针指向关联地址的值,也就是a的值,并重新赋值为100,所以a变量在内存中保存的值就从300变成100
*prt = 100
prt = &b //将prt指针变量中保存的a变量的地址,改成了b变量的地址
*prt = 200//然后将地址指向的值,也就是b变量的值,从400改成了200
fmt.Printf("a=%d,b=%d,prt=%d,*prt=",a,b,prt,*prt)
//打印出的值
a=100 b = 200 prt = b的地址 *prt = 200
}
注意:指针修改的值,是保存在内存空间中的值,他是直接将从新赋值的值,覆盖内存中的旧值,所以使用指针变量重新赋值后,旧的值就不存在了
Go指针详解:地址与值操作
452

被折叠的 条评论
为什么被折叠?



