package main
import "fmt"
// go的指针
// &:取地址符,放在变量前返回相应变量的内存地址
//Go语言允许向函数传递指针,只需要在函数定义的参数上设置为指针类型即可
func swap(num1 *int, num2 *int) {
var temp int = *num1 //保存 num1 地址的值
*num1 = *num2 //将 num2的地址 赋值给 num1
*num2 = temp //将temp中保存的num1的地址赋值给num2 交换完成
}
func main(){
var a int = 100 //声明实际变量
fmt.Println(&a) //输出了变量a的地址
// 指针声明格式:var 指针名 *指针类型
/*
指针使用流程:
定义指针变量。
为指针变量赋值。
访问指针变量中指向地址的值。
*/
//当一个指针被定义后没有分配到任何变量时,它的值为nil。
//nil 指针也称为空指针。
//nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。
//一个指针变量通常缩写为 ptr。
var pa *int //声明指针变量
var pb *float32
if(pb == nil){
fmt.Println("pb是空指针")
}
pa = &a //指针变量的存储地址
//*pb = 0.01
//这里会报错!因为pb在没有指向一个地址的时候就向pb所指向的位置赋值就会报错!
if(pb == nil){
fmt.Println("pb在被赋值后还是空指针")
}
fmt.Println(*pa)
//定义指针数组 var 指针数组名 [指针数组长度] *指针数组类型
var pc [5] *int
var c = [5]int{2, 1, 2, 4, 6}
for i := 0; i < len(c); i++ {
pc[i] = &c[i] //整数地址赋值给指针数组
}
for i := 0; i < len(c); i++ {
fmt.Println(*pc[i])
}
//Go语言中指向指针的指针:一个指针变量存放的又是另一个指针变量的地址
//即当定义一个指向指针的指针变量时,第一个指针存放第二个指针的地址,第二个指针存放变量的地址
//var 指向指针的指针名字 **指针类型
var ppa **int
ppa = &pa
fmt.Println("a:", a) //a:100
fmt.Println("*pa:", *pa) //*pa:100
fmt.Println("**ppa", **ppa) //**ppa:100
//这里先定义另外一个局部变量b
var b int = 200
fmt.Printf("交换前a的值 : %d\n", a ) //a:100
fmt.Printf("交换前b的值 : %d\n", b ) //b:200
swap(&a, &b)
fmt.Printf("交换后a的值 : %d\n", a ) //a:200
fmt.Printf("交换后b的值 : %d\n", b ) //b:100
}
【Golang】7.用代码形式总结go的指针
最新推荐文章于 2023-12-25 16:51:12 发布