go语言的指针指针就是一个指向另一个内存地址变量的值
- go指针不能运算
- Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。
- Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和*(根据地址取值)。
var a, b int= 1, 2
swap2(&a, &b)
fmt.Println(a, b)
func swap2(a , b *int) {
*a, *b = *b, *a
}
如何使用指针
- 定义指针变量。
- 为指针变量赋值。
- 访问指针变量中指向地址的值。
- 获取指针的值 在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。
package main
import "fmt"
func main() {
var a int= 20
var ip *int
ip = &a
fmt.Printf("a 变量的地址是: %xn", &a )
fmt.Printf("ip 变量储存的指针地址: %xn", ip )
fmt.Printf("*ip 变量的值: %dn", *ip )
}
// 输出
a 变量的地址是: 20818a220
ip 变量储存的指针地址: 20818a220
*ip 变量的值: 20
go空指针
- 当一个指针被定义后没有分配到任何变量时,它的值为 nil。
- nil 指针也称为空指针。
- nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。
- 一个指针变量通常缩写为 ptr。
package main
import "fmt"
func main() {
var ptr *int
fmt.Printf("ptr 的值为 : %xn", ptr )
// 通过判断指针变量是否等于 nil 判断其是否是 空指针
if(ptr != nil) {
fmt.Println("ptr 不是空指针")
}
if(ptr == nil) {
fmt.Println("ptr 是空指针")
}
}
指针不要操作没有合法指向的内存
var p * int
p = nil
fmt.Printf("p = %v", p)
*p = 666 //错误, 指针不要操作没有合法指向的内存
new函数的使用
//p是*int类型,指向int类型
p = new(int)
*p = 666
fmt.Printf("*p = %d", *p)



