05、运算符
指针
Go语言中的指针
任何程序数据载入内内存后,在内存都有他们的地址。而为了保存一个数据在内存中的地址,我么就需要用到指针变量。
再Go语言中的指针不能进行偏移和运算,只需记住两个符号&
(取地址),*
(根据地质取值)。
指针地址和指针类型
每个变量在运行时都有一个地址,这个地址代表变量再内存中的位置,Go语言使用&
字符放在变量前面进行”取地址“操作。Go语言值类型(int, float, bool, string, array, struct)都有其对应的指针类型,如*int
, *int64
,*string
等。
1 | ptr := &v //v的类型为T |
1 | //取地址 |
指针取值
对普通变量使用&操作符可以获得这个变量的指针,对指针使用*操作可以获得该地址上存储的值。
1 | c := "你好" |
总结:
1 | 取地址操作符`&`和取值操作符`*`是一对互补操作符。&取出地址,*根据地址取出地址指向的值。 |
使用指针进行值传递
1 | func main(){ |
new()
new()是一个内置函数,他的函数签名如下:
1 | func new(Type) *Type //出入一个指定的Type类型,返回的是Type类型的一个指针 |
new()函数不太常用,使用new()函数可以得到一个类型的指针,并且该指针对应的值为零值。
1 | //通过new()获得某一类型的指针 |
注意:声明指针类型的变量时,必须进行初始化才会拥有内存空间,才能对其进行赋值。
1 | var i *int |
make()
make函数也适用于分配内存的,区别于new(),它只适用于slice, map, channel的内存创建,而且它的返回值类型就是这三个类型本身,而不是指针类型,因为这三种类型就是引用类型,就没有必要返回他们的指针。
make()的函数签名:
1 | func make(t Type, size ...IntegerType) Type |
make()函数是无可替代的,我们在使用slice, map, channel时,都需要使用make()进行初始化,才可以对他们进行操作。
1 | var k map[string]int //只是声明一个map,此时还没有分配内存,不可以使用 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DurianLollipop的个人博客!
评论