小编Gnu*_*kos的帖子

Golang&(*(&v))语义

我今天遇到了一个问题,并且能够快速找到并修复它,但是并不完全理解为什么golang语义就是这样.

我正在使用Go 1.10.

package main

import "fmt"

type T struct {
    V int
}

var testT = T{}

func main() {
    t := &(*(&testT))
    t.V = 4
    fmt.Println(t, testT) // test.V == t.V -> t == &testT

    t1 := &testT
    t2 := *t1
    t3 := &t2
    t3.V = 5
    fmt.Println(t3, testT) // t3.V == 4 and test.T == 4 -> t3 != &testT
}
Run Code Online (Sandbox Code Playgroud)

产量

&{4} {4}
&{5} {4}
Run Code Online (Sandbox Code Playgroud)

我期望不要等于&testT所以有与t3相同的语义,但是如果我将中间结果存储在变量中,我会看到&(*(&))序列没有相同的语义

我的问题

这种行为的原因是什么?

pointers go dereference address-operator

-2
推荐指数
1
解决办法
294
查看次数

标签 统计

address-operator ×1

dereference ×1

go ×1

pointers ×1