Golang基础——数据类型:指针

指针:

var a *int       // 指针,零值为 nil
var b *int = nil // 空指针
// var c *int  // 野指针,直接赋值,没有指向,报错
// *c = 222  // invalid memory address or nil pointer dereference

var d *int
d = new(int) // 创建整型大小的空间,gc垃圾回收机制,自动释放空间
*d = 2

e := new(int) // 自动推导类型
*e = 2

p := 1
a = &p
*a = 111
// a = 222  // 不行
// f := new([3]*int)  // &[<nil> <nil> <nil>]
// f := new([3]*int)  // &[0 0 0]

g := [3]int{1, 2, 3}
var p2 *[3]int  // 数组指针
p2 = &g
p1 := &g
p2[1] = 222
// *p2[2] = 333  // 不行,注意优先级:优先[],invalid indirect of p2[2] (type int)
(*p2)[2] = 333
k1 := 1
k2 := 2
k3 := 3
var arr = [3]*int{&k1, &k2, &k3}  // 指针数组:[0xc000012090 0xc000012098 0xc0000120a0]
fmt.Println(p, a, b, d, *e, p2, &p2, p1)
fmt.Println(arr)

s := []int{1, 2, 3, 4, 5}  // 切片指针
p := &s
fmt.Println(p) // &[1 2 3 4 5] p指向s变量的地址,s地址存储的是切片的地址
pp := &p
fmt.Printf("%T,%T
", p, pp)  // *[]int,**[]int ; pp 为二级指针
// p为一级指针,指向变量的地址
// pp为二级指针,指向指针的地址
// 三级指针,,,
原文地址:https://www.cnblogs.com/pythonwl/p/14598961.html