go 基础-3
指针
可以理解为就是内存地址
& 获取内存地址 * 根据内存地址来获取值
//函数是值拷贝操作,所以要修改值就需要用到指针操作
- 对变量进行取地址(&)操作,可以获得这个变量的指针变量。
- 指针变量的值是指针地址。
- 对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值。
func modify1(x int) {
x = 100
}
func modify2(x *int) {
*x = 100
}
func main() {
a := 10
modify1(a)
fmt.Println(a) // 10
modify2(&a)
fmt.Println(a) // 100
}
new和make用来做内存分配的,因为Go语言中对于引用类型的变量,我们在使用的时候不仅要声明它,还要为它分配内存空间,否则我们的值就没办法存储,就会出发panic,所以要用new和make来做内存分配。- 二者都是用来做内存分配的。
- make只用于slice、map以及channel的初始化,返回的还是这三个引用类型本身;
- 而new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。
- new返回的是一个指向该类型内存地址的指针,比如int就返回*int
- make返回类型本身
func main() {
var a *int
a = new(int)
*a = 100
fmt.Println(*a)
var b map[string]int
b = make(map[string]int, 10)
b["xxx"] = 100
fmt.Println(b)
}