Golang中的&与*

Cyvadra · · 8054 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

&和*用于指针和值的转换

var a int = 3

这时候,&a代表变量a的内存地址,可以自行Printf一下,stackoverflow上也有案例
则有*&a == a == 3,*姑且可视为取值
让我们来看以下代码:

package main
import "fmt"
//简单的一个函数,实现了参数+1的操作
func add1(a *int) int { // 请注意,
  *a = *a+1 // 修改了a的值
  return *a // 返回新值
} 
func main() {
  x := 3
  fmt.Println("x = ", x) // 应该输出 "x = 3"
  x1 := add1(&x) // 调用 add1(&x) 传x的地址
  fmt.Println("x+1 = ", x1) // 应该输出 "x+1 = 4"
  fmt.Println("x = ", x) // 应该输出 "x = 4"
}

在julia中很好理解一个事情,就是改变参数值的函数,都会在函数名中标明!,例如sort!(list_name),直接就完成了,我倒没深究过原理……
在golang中,当我们看到如上述代码时,思考指针的情况就可以了
为方便也可以视*a为一个整体,函数f(&x)常用于改变参数x的值

另有:

var b *int = &a

另外又有这种代码,又或者直接var b *int,在这里我加了个&a,便于理解,此处定义了b为a的内存地址
如不加参数,var c *string,c则是一个空指针,默认值为nil,也可用nil判断指针是否为空

总之,&是取指针,*是取值


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Cyvadra

查看原文:Golang中的&与*

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

8054 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传