简介
- 取地址符是&
- 指针保存的是地址,地址里的数据才是真正的值,使用*来获取值
nt系列、float系列、boo;、string、数组、结构体struct都有指针,一般在栈
指针、切片、管道、接口、Map是引用类型,一般在堆,GC回收
声明
空指针
Go中的空指针是nil
var ptr *int
零值指针
func new(Type) *Type
内建函数new分配内存。其第一个实参为类型,而非值。其返回值为指向该类型的新分配的零值的指针。
ptr1 := new(int)
声明并初始化
1. i := 10 2. ptr2 := &i
ptr2存的是i的地址
指针的指针
pptr := & ptr2
pptr存的是ptr2的地址
内存
以前面的指针和指针的指针为例
内存结果见后序截图
函数传递指针
1. func plus(p *int) { 2. (*p)++ 3. }
plus(ptr2)
全部代码
package main import "fmt" func plus(p *int) { (*p)++ } func main() { //------------声明指针------------ //---空指针--- var ptr *int //---零值指针--- ptr1 := new(int) fmt.Println("ptr ptr1 *ptr1,:",ptr,ptr1,*ptr1) //-----------声明并初始化---------- i := 10 ptr2 := &i fmt.Printf("i的地址&i:%v,i的值:%v,ptr2的地址&ptr2:%v,ptr2的值:%v,ptr2指向的值:%v\n",&i,i,&ptr2,ptr2,*ptr2) //-------------指针的指针---------- pptr := & ptr2 fmt.Printf("pptr的地址&pptr:%v,pptr的值pptr:%v,pptr指向的值*pptr:%v,ptr2的地址&ptr2:%v,ptr2的值:%v,ptr2指向的值:%v\n",&pptr,pptr,*pptr,&ptr2,ptr2,*ptr2) //-------------函数形参指针-------- plus(ptr2) fmt.Println(i) }
结果截图
更多Go相关内容:Go-Golang学习总结笔记
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。