golang 中的go指针

go语言是支持指针的,假设有一个int型变量x,&x表示取x的地址,将此值赋给p,那么p就是指针。去的指向的值,使用*p

 var  int x 

p := &x

fm.Println(*P)

*p = 1

fmt.Println(x)

本书默认初始值的叫法,zero value。

我们可以使用指针来代替变量名,如果指针改变了变量值,会影响到变量名,因为本质上他们是同一个内存空间

上面的例子是基本类型,其实符合类型也是变量,他们也有一个地址,也是可以通过指针操作的,复合类型内的具体元素同样有地址,并且可以通过指针进行操作。

对于上礼中的p,我们称之为指针类型,指针类型的默认初始值为nil,可以通过p==nil来判断是否取得地址,nil就是未取得。

golang 中的go指针_第1张图片

上述代码中,有两个函数,selfPlusPointer 和 selfPlus

接收的是一个int类型的参数,直接执行了自增运算,自增go语言中不是一个表达式。selfPlus函数接收到一个整形参数,这是用一个临时变量存储自增的结果。然后在返回临时变量的指针类型

 定义变量m,要注意&m 参数的使用,它代表m的地址给selfPlusPointer 函数,接着打印m。

因为selfPlus返回的是指针类型,所以打印的时候*前缀,否则打印的是地址

go语言中,除非显示的使用指针,否则所有的值传递都是具体值的复制,包括数组等复合数据,

 前面介绍指针的时候用的都是有变量名的变量,那么可不可以直接使用指针指向一个没有变量名的变量呢

go语言提供了new函数来帮助我们创建一个不需要名称的变量,可以直接赋给一个指针,其用法非常简单

p  := new(int)  p为*int类型 

fmt.Println(*p) value为0

对于指针的介绍,go的指针比c++的安全多

你可能感兴趣的:(golang,golang,开发语言,后端)