地址:内存地址,用字节描述
指针:指向内存地址,带类型。不可操作,只读。string类型指针和int类型指针是不一样的类型。
&
:取地址
*
:取值
func main() {
var a = 100
b := &a
fmt.Println(a)
fmt.Printf("%T\n", b)
fmt.Println(b)
fmt.Println(*b)
}
输出
100
*int
0xc0000140b0
100
new和make
func main() {
//new用来初始化值类型的指针
//得到一个int类型指针
var a = new(int)
fmt.Println(*a) //0
var b = new([3]int)
(*b)[0] = 1
b[1] = 2
fmt.Println(*b) //[1 2 0]
//make用来初始化引用类型(slice、map、chan)指针的
var c = make([]int, 5)
fmt.Println(c) //[0 0 0 0 0]
}
修改数组的值
func main() {
a := [...]int{1, 2, 3}
fmt.Println(a) //[1 2 3]
modify1(a)
fmt.Println(a) //[1 2 3]
modify2(&a)
fmt.Println(a) //[100 2 3]s
}
func modify1(a [3]int){
a[0] = 100
}
func modify2(a *[3]int){
(*a)[0] = 100
//语法糖写法
// a[0] = 100
}