pointers - Go 中的临时地址?

标签 pointers return go temporary rvalue

处理这种情况最干净的方法是什么:

func a() string {
    /* doesn't matter */
}

b *string = &a()

这会产生错误:

cannot take the address of a()

我的理解是,如果它的地址被占用,Go 会自动将局部变量提升到堆中。这里很明显是要取返回值的地址。处理此问题的惯用方法是什么?

最佳答案

地址运算符返回指向具有“家”的东西的指针,例如一个变量。您的代码中表达式的值是“无家可归”。如果你真的需要一个 *string,你必须分两步完成:

tmp := a(); b := &tmp

请注意,虽然 *string 有完全有效的用例,但很多时候使用它们是错误的。在 Go 中,string 是一种值类型,但传递起来很便宜(一个指针和一个 int)。 String 的 value 是不可变的,更改 *string 会更改“home”指向的位置,而不是字符串值,因此在大多数情况下 *string根本不需要。

关于pointers - Go 中的临时地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41124798/

相关文章:

c - 使用 C 返回数组

java - 访问循环中返回的对象

shell - 为什么我没有得到我的函数的返回?

go - Go 中的死锁,两个例程拆分工作

algorithm - go 中更好的并发素数筛

c - C 中使用指针的 for 循环声明

c - 返回指向数组的指针的函数 - 转换并获取值

c - 通过嵌套结构访问指针

c - 奇怪的 malloc 行为

go - 自定义类型作为参数传递给函数