内存地址 链表 指针

papering / 2023-05-11 / 原文

 

    type LinkNode struct {
        Val  int
        Next *LinkNode
    }
    e := &LinkNode{}
    f := e
    fmt.Println(" &e=", &e, " &f=", &f)
    fmt.Println(" &e.Next=", &e.Next, " &f.Next=", &f.Next)
    fmt.Println(" *e=", *e, " *f=", *f)

    fmt.Println("0----")

    i := &LinkNode{}
    j := &LinkNode{}
    i.Next = j
    fmt.Println(" &i.Next=", &i.Next)
    p := i
    q := &LinkNode{}
    p.Next = q
    fmt.Println(" &i=", &i, " &j=", &j, " &p=", &p, " &q=", &q)
    fmt.Println(" &(i.Next)=", &(i.Next), " &(p.Next)=", &(p.Next))
    fmt.Println(" &i.Next=", &i.Next, " &p.Next=", &p.Next)
    fmt.Println(" i.Next=", i.Next, " p.Next=", p.Next)
    fmt.Println(" *i=", *i, " *j=", *j, " *p=", *p, " *q=", *q)
    fmt.Println("1----")
    if 1 > 0 {
        i := &LinkNode{}
        j := &LinkNode{}
        i.Next = j
        j.Val = 123
        fmt.Println(" &i.Next=", &i.Next)
        p := i
        q := &LinkNode{}
        p.Next = q
        q.Val = 456
        fmt.Println(" &i=", &i, " &j=", &j, " &p=", &p, " &q=", &q)
        fmt.Println(" &(i.Next)=", &(i.Next), " &(p.Next)=", &(p.Next))
        fmt.Println(" &i.Next=", &i.Next, " &p.Next=", &p.Next)
        fmt.Println(" i.Next=", i.Next, " p.Next=", p.Next)

        fmt.Println(" *i=", *i, " *j=", *j, " *p=", *p, " *q=", *q)
    }
    fmt.Println("2----")
    if 1 > 0 {
        i := &LinkNode{}
        j := &LinkNode{}
        i.Next = j
        j.Val = 123
        fmt.Println(" &i.Next=", &i.Next)
        p := i
        fmt.Println("2-0---p和i存同一个节点的地址,p的变动会影响i")

        q := &LinkNode{}
        p.Next = q
        q.Val = 456
        fmt.Println(" &i=", &i, " &j=", &j, " &p=", &p, " &q=", &q)
        fmt.Println(" &(i.Next)=", &(i.Next), " &(p.Next)=", &(p.Next))
        fmt.Println(" &i.Next=", &i.Next, " &p.Next=", &p.Next)
        fmt.Println(" i.Next=", i.Next, " p.Next=", p.Next)

        fmt.Println(" *i=", *i, " *j=", *j, " *p=", *p, " *q=", *q)
        fmt.Println("2-1---p和i不存同一个节点的地址,p的变动不会影响i")
        q1 := &LinkNode{}
        p = q1
        fmt.Println(" &i=", &i, " &j=", &j, " &p=", &p, " &q=", &q)
        fmt.Println(" &(i.Next)=", &(i.Next), " &(p.Next)=", &(p.Next))
        fmt.Println(" &i.Next=", &i.Next, " &p.Next=", &p.Next)
        fmt.Println(" i.Next=", i.Next, " p.Next=", p.Next)

        fmt.Println(" *i=", *i, " *j=", *j, " *p=", *p, " *q=", *q)
    }

 

 

&e= 0xc00000a080 &f= 0xc00000a088
&e.Next= 0xc0000510c8 &f.Next= 0xc0000510c8
*e= {0 <nil>} *f= {0 <nil>}
0----
&i.Next= 0xc0000510f8
&i= 0xc00000a090 &j= 0xc00000a098 &p= 0xc00000a0a0 &q= 0xc00000a0a8
&(i.Next)= 0xc0000510f8 &(p.Next)= 0xc0000510f8
&i.Next= 0xc0000510f8 &p.Next= 0xc0000510f8
i.Next= &{0 <nil>} p.Next= &{0 <nil>}
*i= {0 0xc000051110} *j= {0 <nil>} *p= {0 0xc000051110} *q= {0 <nil>}
1----
&i.Next= 0xc000051188
&i= 0xc00000a0b0 &j= 0xc00000a0b8 &p= 0xc00000a0c0 &q= 0xc00000a0c8
&(i.Next)= 0xc000051188 &(p.Next)= 0xc000051188
&i.Next= 0xc000051188 &p.Next= 0xc000051188
i.Next= &{456 <nil>} p.Next= &{456 <nil>}
*i= {0 0xc0000511a0} *j= {123 <nil>} *p= {0 0xc0000511a0} *q= {456 <nil>}
2----
&i.Next= 0xc000051218
2-0---p和i存同一个节点的地址,p的变动会影响i
&i= 0xc00000a0d0 &j= 0xc00000a0d8 &p= 0xc00000a0e0 &q= 0xc00000a0e8
&(i.Next)= 0xc000051218 &(p.Next)= 0xc000051218
&i.Next= 0xc000051218 &p.Next= 0xc000051218
i.Next= &{456 <nil>} p.Next= &{456 <nil>}
*i= {0 0xc000051230} *j= {123 <nil>} *p= {0 0xc000051230} *q= {456 <nil>}
2-1---p和i不存同一个节点的地址,p的变动不会影响i
&i= 0xc00000a0d0 &j= 0xc00000a0d8 &p= 0xc00000a0e0 &q= 0xc00000a0e8
&(i.Next)= 0xc000051218 &(p.Next)= 0xc0000512a8
&i.Next= 0xc000051218 &p.Next= 0xc0000512a8
i.Next= &{456 <nil>} p.Next= <nil>
*i= {0 0xc000051230} *j= {123 <nil>} *p= {0 <nil>} *q= {456 <nil>}