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