指针的基本意义是存储某些值所在的内存地址。 (推荐学习:go)

在 Golang 中,虽然不是所有的值都可以取出地址(尽管他们也存储在内存中,比如 const),但所有的变量必然可以取出地址。

变量,就是一块内存区域中存储的值[1]。不仅我们熟悉的 var x int 中的 x 是变量,一个比较复杂的表达式也可以表示一个变量,比如sliceA[0],mapB["key"],以及structC.FieldD。也就是说,他们都可以有自己的指针。

当我们需要修改结构体的变量内容的时候,方法传入的结构体变量参数需要使用指针,也就是结构体的地址,需要修改map中的架构体的变量的时候也需要使用结构体地址作为map的value。

Go 可以直接新建 struct 的指针

在 golang 中,我们可以通过ptr := &A{Value: 1},就得到了一个结构体 A 值的指针;但在 C 中就无法通过单独的赋值语句得到:

typedef struct {    int value;} A;A *ptr1; // 无法给 ptr 所指的值赋值A *ptr2 = &A{1}; // 没有这样的语法A a = {1}; // 再通过 &a 可以得到指针

如果说这个区别只是语法上的表象,另外一个区别可能就是事关 bug 的区别了。

2. Go 中可以安全地返回局部变量的指针

在上面的 C 代码举例中,我们确实可以声明一些变量,但如果这些声明是在一个方法内完成的,比如:

A *init(){    A *ptr;    return ptr;}

或者

A *init(){    A a;    return &a;}

那么,这个声明出来的局部变量,是一种自动变量(automatic variable[3]),原方法,也就是 init() 方法,结束后,这些自动变量就“消失”了。

更多相关文章

  1. golang 空指针怎么检查
  2. golang怎么判断指针是否为空
  3. 记一次因为共享变量的犯错误
  4. 关于Go指针的介绍
  5. golang中方法的receiver为指针和不为指针有什么区别
  6. 关于Golang 指针理解
  7. go语言环境变量如何设置
  8. go语言如何判断变量是slice还是array
  9. go语言有指针吗

随机推荐

  1. kubernetes 命令随手记录
  2. modelsim经常破解失败
  3. 动画:面试算法之求二叉树的下一节点
  4. 72.打印正方形脚本
  5. 学Linux云计算技术有意义吗?如何学习linux
  6. nginx1.19.1自动安装部署脚本
  7. 利用端口扫描进行终端合规性检查的一个示
  8. 动画:散列表 | 文本编辑器是如何检查英文
  9. 认命,但就不服命!
  10. Linux学习之linux的find命令如何使用?