目录:
- 指针定义
- 指针零值
- 指针的解引用
- 不要向函数传递数组的指针,而应该使用切片
- Go不支持指针运算
指针定义
什么是指针
指针是一种存储变量内存地址的变量
如图所示,变量a存储了变量b的内存地址,此时a指向b,a就是指针
指针声明
* 反解 解引用
& 取地址符号
func main() {
b:=156
// 定义指针a,得到b的地址
var a *int=&b
// 会打印b的地址
fmt.Println(a)
// 反解
fmt.Println(*a)
}
指针零值
指针的零值是nil
func main() {
var a *int
fmt.Println(a)
}
指针的解引用
通过地址修改b的值
func main() {
b := 255
a := &b
fmt.Println(b)
fmt.Println(a)
// 反解a,并且自增1
*a++
fmt.Println(b)
}
向函数传递指针参数,示例中b打印为10
package main
import "fmt"
func main() {
b:=255
a:=&b
test(a)
fmt.Println(b)
}
func test(a *int){
*a = 10
}
不要向函数传递数组的指针,而应该使用切片
- 直接传递数组地址,(不推荐,建议使用切片)
func main() {
a:= [3]int {
1,
2,
3,
}
test(&a)
fmt.Println(a)
}
func test(a *[3]int){
(*a)[0] = 10
}
- 使用切片
func main() {
a:= [3]int {
1,
2,
3,
}
b := a[:]
test(b)
fmt.Println(a)
}
func test(b []int){
b[0] = 10
}