Go:值类型、引用类型
值类型,变量存的就是值本身:
in系列t、float系列、bool、string、数组和struct
引用类型,变量存的是一个地址,这是地址存的才是值本身:
指针、slice、map、chan、interface
获取变量的地址,使用 &,比如: var a int,使用 &a 获取变量a的地址。
获取指针所指向的值,使用 *,比如:var *p int,使用 *p 获取p指向的值,使用 &p 获取指针p的地址。
package main import "fmt" // 方式1:交换两个变量的值 func swap1(a, b *int) { *a, *b = *b, *a } // 方式2:交换两个变量的值 func swap2(a, b int) (int, int) { return b, a } func main() { var i int = 10 var p *int = &i // *int代表指针,&a代表获取a的地址 *p = 20 // 给指针所指向的值赋值 fmt.Println(i) // 20 a, b := 11, 22 swap1(&a, &b) fmt.Println(a, b) // 22 11 c, d := 33, 44 c, d = swap2(c, d) fmt.Println(c, d) // 44 33 }
更多演示:
package main import "fmt" func main() { var i int i = 10 fmt.Printf("i的地址:%p\n", &i) var pointer *int pointer = &i fmt.Printf("pointer是一个指针变量:%v\n", pointer) fmt.Printf("pointer的地址:%p\n", &pointer) fmt.Printf("pointer指向的值:%v\n", *pointer) } // 输出结果: // i的地址:0xc00000a0c8 // pointer是一个指针变量:0xc00000a0c8 // pointer的地址:0xc000006030 // pointer指向的值:10