1

spstruct ( ) を struct ポインター ( &s) で定義した後、最初の struct ( s) が変更され続け、後者 ( ) が変更される理由がわかりませんsp

http://play.golang.org/p/TdcL_QJqfB

type person struct {
    name string
    age int
}

func main() {
    s := person{name: "Sean", age: 50}
    fmt.Printf("%p : %g\n", &s, s.age)

    sp := &s
    fmt.Printf("%p : %g\n", &sp, sp.age)

    sp.age = 51
    fmt.Printf("%p : %g\n", &sp, sp.age) // yield 51
    fmt.Printf("%p : %g\n", &s, s.age) // yields 51, but why not 50 ???
}

出力:

0xc0100360a0 : %!g(int=50)
0xc010000000 : %!g(int=50)
0xc010000000 : %!g(int=51)
0xc0100360a0 : %!g(int=51) // why not 50 ???

私は C ファミリー言語、Go、およびポインターを初めて使用するので、正しい概念またはエラーへのポインター (:)) は非常に親切です。前もって感謝します !

4

1 に答える 1

4

オブジェクトがありますs。そして、sp指すポインターs。したがって、 をage介して設定するspと、実際には が変更されsます。

spは別のオブジェクトではないことに注意してください。エイリアスのようなものです。

于 2013-11-04T18:43:34.093 に答える