go语言中指针是很容易学习的,比C中容易的多,它可以更简单地执行一些任务,每个变量都有内存地址,可以理解为变量来操作对应的内存,go语言的取地址符是&,放到一个变量前使用就会返回相应变量的内存地址
func main() {
var a int = 10
fmt.Printf("变量地址:%x\n", &a)
}
var 指针变量名 *指针类型
示例:
func main() {
var a int = 20
var ip *int
// 指针存地址
ip = &a
// %x 以十进制方式表示
fmt.Printf("a的地址:%x\n", &a)
fmt.Printf("ip变量的值:%x\n", ip)
fmt.Printf("ip指向的变量的值:%d\n", *ip)
}
当一个指针被定义后没有分配到任何变量时,它的值为 nil
func main() {
var p *int
fmt.Println(p)
fmt.Printf("p的值 %x\n", p)
}
示例1:
func swap(a, b *int) {
fmt.Println(a, b)
*a, *b = *b, *a
}
func main() {
a, b := 3, 4
swap(&a, &b)
fmt.Println(a, b)
}
示例2:
func swap(a, b *int) (*int, *int) {
a, b = b, a
return a, b
}
func main() {
a, b := 3, 4
c, d := swap(&a, &b)
fmt.Println(*c, *d)
a = *c
// *d 指向 a,a更改为4,所以*d也更改为4
b = *d
fmt.Println(a, b)
}

示例:
func main() {
p := new([]int)
fmt.Println(p)
m := make([]int, 10, 50)
fmt.Println(m)
}原文:https://www.cnblogs.com/Wshile/p/12793624.html