一、指针
Go拥有指针。指针保存了值的内存地址。类型 *T 是指向 T 类型值的指针,其零值为 nil; Go 没有指针运算
var p *int
& 操作符会生成一个指向其操作数的指针。
i := 42
p = &i
- 操作符表示指针指向的底层值。这也就是通常所说的“间接引用”或“重定向”。
fmt.Println(p) // 通过指针 p 读取 i p = 21 // 通过指针 p 设置 i
1 | func PointerDemo() { |
二、结构体
结构体(struct)就是一个字段的集合。1
2
3
4
5
6
7
8
9
10
11
12
13
14func PointDemo() {
//声明一个结构体
var point = Point{2,3}
fmt.Println(point) //{2 3}
//声明一个结构体
var point2 = Point{}
fmt.Println(point2) //{0 0}
//结构体字段使用.来访问
point2.x = 10 //给x赋值
point2.y = 5
fmt.Println(point2, point2.x, point2.y) //{10 5} 10 5
}
三、结构体指针
结构体字段可以通过结构体指针来访问。
如果我们有一个指向结构体的指针 p,那么可以通过 (*p).X 来访问其字段 X。不过这么写太啰嗦了,所以语言也允许我们使用隐式间接引用,直接写 p.X 就可以。1
2
3
4
5
6
7
8
9
10
11
12
13
14func StructPointer() {
fmt.Println("结构体指针...")
//声明结构体
point := Point{2,3}
fmt.Println(point) //{2 3}
p := &point //指针 取得point内存
p.x = 1024
fmt.Println(point) //{1024 3}
point3 := &Point{1, 2}
fmt.Println(point3) //&{1 2}
}