Golang pointer
2014-12-16 本文已影响322人
并肩走天涯
Golang pointer
- 指针,保存了变量的内存地址,可以让不同的变量共享同一片内存
-
在使用
goroute 去程并发编程
时,要管理好共享的内存,避免冲突。-
slice 也含有一个指向底层数组的指针
-
不使用指针的类型是安全的,因为它们的变量在赋值时都会复制,不存在内存共享的问题。
var i int var p *int var pp **int i = 0 p = &i pp = &p *p++ // *p++ == (*p)++,++ 只能用于整数类型,是单独的语句 fmt.Println(i, p, *p, pp, *pp)
-
-
类型
*T
是指向类型 T
的值的指针
;其初始值是nil
var p *int // int 的指针类型 var p **int // int 指针的指针类型
-
生成指针变量
&
符号会生成一个指向其作用对象[变量]
的指针// & 取变量的指针,&p 是变量 p 的指针 & 是取值运算符,&s 表示 s 的地址,其中 s 是变量 i := 42 p = &i
-
指针变量对应的变量的值
* 符号
,表示指针指向的底层的值 - “间接引用”或“非直接引用”// * 取指针变量的值,*p 是变量 p 指向的值 fmt.Println(*p) // 通过指针 p 读取 i *p = 21 // 通过指针 p 设置 i
-
总结
如同 k: v 结构中的 k - &, v - * key: value var i int var p *int p = &i // key, 也就是开拓出来的内存空间 *p = 21 // value, 也就是内存空间里的值
-