指针
Go语言中的指针不能进行偏移和运算,没有内存泄漏的风险。
&:取地址操作符,取出变量的地址*:取值操作符,取出指针指向的值
b := &a:这里的b是指针变量,保存变量a的地址,且*b == a。
指针变量是引用类型的变量,声明时不会默认分配内存空间(值类型的变量在声明时会默认分配内存空间),需要使用内建函数来分配。
如果只声明就直接赋值,会引发panic。
new
new是一个内建函数,用于值类型的内存分配。使用方法如下:
a := new(Type)
Type表示类型,new函数返回*Type类型的指针,指向的值对应类型的零值。
a := new(int)
fmt.Printf("%T\n", a) // *int
fmt.Println(*a) // 0
*a = 1
fmt.Println(*a) // 1
make
make用于slice、map以及chan这三个引用类型的初始化,其返回的类型就是这三个类型本身,而不是他们的指针类型。
slice:make([]T, len, cap),T表示元素类型;len表示切片长度,每个元素初始化为对应类型的零值;cap表示容量,默认等于长度,其值必须大于等于长度。map:make(map[T1]T2, size),第一个参数是类型;size表示初始化分配内存的大小,可忽略,忽略时会分配一个小一点的内存。可以估算好程序运行期间需要的内存大小,避免不停的动态扩容。初始化后的长度是0。channel:make(chan T, cap),第一个参数是类型;cap表示容量,默认是0。
本文详细介绍了Go语言中的指针概念,包括如何使用&取地址和*取值操作符,以及指针变量与内存分配的区别。同时,探讨了new与make函数在内存管理中的应用,如值类型内存分配、slice、map和chan的初始化。

被折叠的 条评论
为什么被折叠?



