一、基本介绍
变量的地址,使用&,int num int , 地址#
指针变量存的是一个地址,这个地址指向的空间存的是值:var ptr *int = &num
package main
import "fmt"
func main() {
var i int = 10
//i的地址用&i表示
fmt.Println("i的地址", &i)
//ptr是一个指针变量,类型是*int,指向int的一个指针,ptr本身的值是&i
//ptr就是i的地址
var ptr *int = &i
fmt.Println("ptr的值是", ptr)
//获取指针类型所指向的值,用*,var ptr *int, 使用*ptr获取ptr指向的值
fmt.Printf("ptr指向的值类型是%T 值为%v", *ptr, *ptr)
}
输出
PS D:\GO\goproject\chaptor4\demo1> go run .\main.go
i的地址 0xc0000a6058
ptr的值是 0xc0000a6058
ptr指向的值类型是int 值为10
二、指针操作
1、修改指针指向的值,会直接修改变量
package main
import "fmt"
func main() {
var num int = 9
fmt.Printf("num的值为%v\n", num)
var ptr *int = &num
*ptr = 10 //修改指针指向的值,会直接修改变量
fmt.Printf("num的值为%v", num)
}
输出
PS D:\GO\goproject\chaptor4\demo2> go run .\main.go
num的值为9
num的值为10
2、指针练习
package main
import "fmt"
func main() {
var a int = 300
var b int = 400
var ptr *int = &a
*ptr = 100 //a=100
ptr = &b
*ptr = 200 //b=200
fmt.Printf("a=%v, b=%v, *ptr=%v", a, b, *ptr)
//100,200,200
}
输出
PS D:\GO\goproject\chaptor4\demo3> go run .\main.go
a=100, b=200, *ptr=200
三、指针使用细节
1、值类型,都有对应的指针类型,形式为数据类型,如int, *float…
2、值类型包括:基本数据类型int系列,float系列,bool,string,数组和结构体struct