指针
指针的值是存储变量的 地址。一个指针指示值所在的位置。不是所有的值都有地址,但是所有的变量一定都有。
指针可以在不知道变量名的情况下,间接读取或更新变量的值。
获取值的地址
- 通过 & 符号可以获取变量的地址,*号获取指针指向地址所对应的值。
x := 1
p := &x
fmt.Println(p)
fmt.Println(*p)
输出:
0xc0000a4058
- 指针可以继续通过&来获取指针所对应的地址
x := 1
p := &x
fmt.Println(p)
fmt.Println(*p)
fmt.Println(&p)
输出:
0xc0000160b0
1
0xc000006028
也就是说,只有&符号可以取出一个地址所对应的值。
- 指针的零值是nil,若
p!=nil
返回true,则说明p指向一个变量。 - 指针可以比较,两个指针指向同一个变量,或者都为nil时,才会相等。
- 指针返回局部变量后,不会导致变量丢失,如下代码:
func main(){
var p = f()
fmt.Println(*p)
}
func f() *int {
v := 1
return &v
}
输出:
1
- 每次调用函数,都会返回不同的值,可以尝试如下代码:
func main(){
fmt.Println(f() == f())
}
func f() * int{
v := 1
return &v
}
输出:
false