为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的临时地址?

Go中的临时地址?

Go
波斯汪 2021-04-30 14:16:01
处理这种情况的最干净方法是什么:func a() string {    /* doesn't matter */}b *string = &a()这将产生错误:不能使用a()的地址我的理解是,如果使用了Go地址,Go会自动将局部变量提升到堆中。在这里,很明显要使用返回值的地址。什么是惯用的处理方式?
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

&只能用于:

  1. 可寻址的东西:变量,指针间接寻址,切片索引操作,可寻址结构的字段选择器,可寻址数组的数组索引操作;或者

  2. 复合文字

您所拥有的都不是这些,所以它是行不通的。

我什至不知道那意味着什么,即使你能做到。取一个函数调用结果的地址?通常,您将某物的指针传递给某人,因为您希望他们能够将其分配给所指向的物,并查看原始变量中的变化。但是函数调用的结果是暂时的。除非您先将其分配给其他人,否则没有其他人“看到”它。

如果创建指针的目的是创建具有动态生存期的内容,类似于new()或获取复合文字的地址,则可以将函数调用的结果分配给变量并获取其地址。


查看完整回答
反对 回复 2021-05-10
?
交互式爱情

TA贡献1712条经验 获得超3个赞

最后,您建议Go应该允许您使用任何表达式的地址,例如:


i,j := 1,2

var p *int = &(i+j)

println(*p)

当前的Go编译器会显示以下错误: cannot take the address of i + j

我认为,允许程序员使用任何表达式的地址:

  • 似乎不是很有用(也就是说:在实际的Go程序中,发生的可能性很小)。

  • 它将使编译器和语言规范变得复杂。

使编译器和规范复杂化而收效甚微似乎适得其反。


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 231 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信