go语言中不存在指针操作,只需记住两个符号
- &: 取地址
- *: 根据地址取值
简单的指针应用
package main
import "fmt"
func main() {
a := 18
//根据值取指针
fmt.Println(&a) //返回的数是个16进制数
//根据指针取值
p := &a
fmt.Println(*p)
//查看指针数据是什么类型的
fmt.Printf("%T", p) //*int类型的,*开头都是指针类型变量
}
总结:
取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值。
变量,指针地址,指针变量,取地址,取值的相互关系和特征如下:
- 对变量进行取地址(&)操作,可以获得这个变量的指针变量。
- 指针变量的值是指针地址
- 对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值
new
给一个变量声明一个 赋予一个内存空间
package main
import "fmt"
func main() {
var a1 *int //这个默认是nil空值是不能被赋值的
fmt.Println(a1)
var a2 = new(int) //这个相当于申请了一个内存地址可以进行赋值
*a2 = 1000
fmt.Println(a2)
fmt.Println(*a2) //这里发现打印的a2值为1000
}
make
make也是用于内存分配的,区别于new,它只用于slice(切片),map以及chan的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没必要返回他们的指针了。
make函数的函数签名如下
func make(t Type, size ...IntegerType) Type
make函数是无可替代的,我们在使用slice,map以及channel的时候,都需要使用make进行初始化,然后才可以对它们进行操作。
make和new的区别
1.make 和new都是用来申请内存的
2.new很少用,一般都是用来给数据类型申请内存,string]、int 返回的是对应类型的指针
3.make是用来给slice、map、chan申请内存的,make函数返回的是对应的这三个类型本身
标签:变量,make,地址,new,fmt,指针 From: https://www.cnblogs.com/suknna/p/17103243.html