package main
import "fmt"
// &获取变量的地址,*获取指针变量指向的地址值,不支持对指针进行操作
func main() {
a := 10
var b *int = &a // b := &a也可以
// 通过指针改变变量的数值
*b = 12
fmt.Printf("变量a地址:%x\n", &a)
fmt.Printf("变量b地址:%x,变量b的值:%v,变量b指向地址值:%v\n", &b, b, *b)
// 通过指针传递函数的参数
num := 59
num2 := &num
fmt.Println("value of a before function call is", num)
change(num2)
fmt.Println("value of a after function call is", num)
// 不要将一个指向数组的指针传递给函数。使用切片。
arr := [3]int{9,10,11}
modify(&arr)
fmt.Println(arr)
// 通常使用切片传递函数的数组参数
modify2(arr[:])
fmt.Println(arr)
}
func change(val *int) {
*val = 55
}
func modify(arr *[3]int){
(*arr)[0] = 90
}
func modify2(arr []int){
arr[0] = 100
}
运行结果:
变量a地址:c0000ac058
变量b地址:c0000d8018,变量b的值:0xc0000ac058,变量b指向地址值:12
value of a before function call is 59
value of a after function call is 55
[90 10 11]
[100 10 11]