🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 指针 指针是一种存储变量内存地址(Memory Address)的变量 ![](https://img.kancloud.cn/e6/ee/e6ee9e7830ad512d1c59f5ea40e78bf3_596x202.png) *说明:区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针* <br> ### 指针的声明 指针变量的类型为`*T`,该指针指向一个**T**类型的变量 ### 指针操作符 `&`(取地址) `*`(根据地址取值) ### 指针的零值(Zero Value) 指针的零值是`nil` ### 指针地址和指针类型 取变量指针的语法如下: ~~~ ptr := &v // v的类型为T -- v:代表被取地址的变量,类型为T -- ptr:用于接收地址的变量,ptr的类型就为*T,称做T的指针类型。*代表指针。 ~~~ ~~~ a := 10 b := &a ~~~ ![](https://img.kancloud.cn/2f/18/2f1887c7073deac32d3246476b3ccc97_1358x600.png) ***** 【知识点】 * 不要向函数传递数组的指针,而应该使用切片 * Go 不支持指针运算 ~~~go func main() { b := [...]int{109, 110, 111} p := &b p++ } output==> invalid operation: p++ (non-numeric type *[3]int) ~~~ 关于指针运算,下面的程序是将指针解引用后进行操作: ~~~ func TestChangeSliceStudy1(t *testing.T) { s := []int{0, 1, 2, 3} p := &s[2] // *int, 获取底层数组元素指针 fmt.Printf("p type:%T, p==>%p \n", p, p) *p += 100 fmt.Println(s) } output===> p type:*int, p==>0xc000140110 [0 1 102 3] ~~~