指针
Go语言中不存在指针操作,只需要记住两个符号
1.&:取地址
2.*:根据地址取值
package main
import "fmt"
// vscode 不支持 go module
// pointer
func main() {
//1.&:取地址
n := 18
p := &n // n存的是一个值 而p则是存了n的内存地址 p本身也有一个内存地址
fmt.Println(p)
fmt.Printf("%T\n", p) //%T查看类型
//*int:int类型的指针
//指针:指向内存地址的一个东西,可以理解为就是个内存地址
//2.*:根据地址取值
m := *p
fmt.Println(m)
fmt.Printf("%T\n", m)
}
总结: 取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值。
变量、指针地址、指针变量、取地址、取值的相互关系和特性如下:
- 对变量进行取地址(&)操作,可以获得这个变量的指针变量。
- 指针变量的值是指针地址。
- 对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值。
Make和new区别
package main
import "fmt"
func main() {
//new
var a1 *int // nil pointer
fmt.Println(a1)
var a2 = new(int) // new 函数 申请一个内存地址
fmt.Println(a2)
fmt.Println(*a2)
*a2 = 100
fmt.Println(*a2)
// make
//make 和new都是用来申请内存的
//new很少用,一般用来给基本数据类型申请内存,string\int,返回的是对应的类型的指针
//make是用来给slice、map、chan申请内存的,make函数返回的是对应的这三个类型的本身
}
参考链接
https://www.liwenzhou.com/posts/Go/07_pointer/
转载请注明:Adminxe's Blog » Go语言学习-指针