【Go语言】指针总结

34指针

package main

import "fmt"

func main() {
	var v int = 10
	fmt.Println(v)
	fmt.Println(&v)

	var p *int = &v
	fmt.Println(p)
	fmt.Println(*p)
}
10
0xc0000160c8
0xc0000160c8
10

36 构造

package main

import "fmt"

type Vertex struct {
	X, Y int
	S    string
}

func main() {
	v := Vertex{X: 1, Y: 2, S: "ver"}
	fmt.Println(v)

	v4 := Vertex{}
	fmt.Printf("%T %v\n", v, v4)

	var v5 Vertex
	fmt.Printf("%T %v\n", v5, v5)

	// ポインタ
	v6 := new(Vertex)
	fmt.Printf("%T %v\n", v6, v6)

	// 推奨
	v7 := &Vertex{}
	fmt.Printf("%T %v\n", v7, v7)

	// スライス
	// 推奨
	s1 := make([]int, 0)
	fmt.Println(s1)

	s2 := []int{}
	fmt.Println(s2)
}

请注意,v4、v5版本的限制方法与v6、v7版本的不同,因此要区分开来。
在声明指针时,推荐使用v7的方法(通过添加“&”符号来明确定义指针)。

同样,切片也有多种定义方式,但s1被推荐使用。
※由于这门课程是一些时间以前的信息,可能已经变化。

package main

import "fmt"

type Vertex struct {
	X, Y int
	S    string
}

func changeVertex(v Vertex) {
	v.X = 1000
}

func changeVertex2(v *Vertex) {
	v.X = 1000
}

func main() {
	v := Vertex{X: 1, Y: 2, S: "ver"}
	changeVertex(v)
	fmt.Println(v)

	v2 := &Vertex{X: 1, Y: 2, S: "ver"}
	changeVertex2(v2)
	fmt.Println(v2)
}
{1 2 ver}
{1000 2 ver}

当需要改变结构体的值时。

在`changeVertex()`函数中,变量只在函数内部被修改,对`main`函数没有影响。
如果想要进行修改,可以在声明结构体时给`v2`加上一个&符号。
传递给`changeVertex2()`时,传递的是存储结构体的内存地址。
通过在函数参数前加上一个星号`*`,可以从传递过来的内存地址引用内容,从而可以修改值。

bannerAds