返回
北京兄弟连IT
置顶
该校与厚学网暂未合作,平台不保证课程的真实有效性,如有侵权等争议,请及时与厚学网联系处理
招生热线:400-656-1390

学校地址:北京市昌平区回龙观文华西路育荣教育园区兄弟连IT教育

兄弟连教育Go语言教程(6)指针

116 2018-08-01 10:40:00

学习笔记

  兄弟连Go语言培训课程体系设计架构包括了区块链的基础语言Go语言、区块链后端技术体系、区块链公链、区块链分布式应用开发等内容讲解,以及到最后的面试指导和项目实战。课程由清华微软谷歌团队精心打造,历时半年时间共同研发而出。

  兄弟连教育Go语言教程(6)指针

  ⽀支持指针类型*T,指针的指针**T,以及包含包名前缀的*.T。

  •默认值nil,没有NULL常量。

  •操作符"&"取变量地址,"*"透过指针访问⺫⽬目标对象。

  •不⽀支持指针运算,不⽀支持"->"运算符,直接⽤用"."访问⺫⽬目标成员。

  funcmain(){

  typedatastruct{aint}

  vard=data{1234}

  varp*data

  p=&d

  fmt.Printf("%p,%v\n",p,p.a)//直接⽤用指针访问⺫⽬目标对象成员,⽆无须转换。

  }

  输出:

  0x2101ef018,1234

  不能对指针做加减法等运算。

  x:=1234

  p:=&x

  p++//Error:invalidoperation:p+=1(mismatchedtypes*intandint)

  可以在unsafe.Pointer和任意类型指针间进⾏行转换。

  funcmain(){

  x:=0x12345678

  p:=unsafe.Pointer(&x)//*int->Pointer

  n:=(*[4]byte)(p)//Pointer->*[4]byte

  fori:=0;i

  fmt.Printf("%X",n[i])

  }

  }

  输出:

  78563412

  返回局部变量指针是安全的,编译器会根据需要将其分配在GCHeap上。

  functest()*int{

  x:=100

  return&x//在堆上分配x内存。但在内联时,也可能直接分配在⺫⽬目标栈。

  }

  将Pointer转换成uintptr,可变相实现指针运算。

  funcmain(){

  d:=struct{

  sstring

  xint

  }{"abc",100}

  p:=uintptr(unsafe.Pointer(&d))//*struct->Pointer->uintptr

  p+=unsafe.Offsetof(d.x)//uintptr+offset

  p2:=unsafe.Pointer(p)//uintptr->Pointer

  px:=(*int)(p2)//Pointer->*int

  *px=200//d.x=200

  fmt.Printf("%#v\n",d)

  }

  输出:

  struct{sstring;xint}{s:"abc",x:200}

  

文中图片素材来源网络,如有侵权请联系删除
来源:北京兄弟连IT
热门课程 全部课程

热门动态

申请免费试听

只要一个电话

我们为您免费回电

立即申请