范围内的golang指针不起作用

为什么结果是 A:&{[{[{1}]}]}A:&{[{[{2}]}]}A:&{[{[{2}]}]}


不是: A:&{[{[{1}]}]}A:&{[{[{2}]}]}A:&{[{[{3}]}]}


我们不能在范围内使用指针?这是代码,我设置了一个指针,指向范围循环,但它失败了。


package main


import(

    "fmt"

)


type A struct{

    Barry []B

}

func (this *A)init(){

    b:=&B{}

    b.init()

    this.Barry=[]B{*b}

    return 

}

type B struct{

    Carry []C

}

func (this *B)init(){

    c:=&C{}

    c.init()

    this.Carry=[]C{*c}

    return 

}

type C struct{

    state string

}

func (this *C)init(){

    this.state="1"

    return 

}

func main(){

    a:=&A{}

    a.init()

    fmt.Printf("A:%v\n",a)

    p:=&a.Barry[0].Carry[0]

    p.state="2"

    fmt.Printf("A:%v\n",a)



    for _,v:=range a.Barry[0].Carry{

        if v.state=="2"{

            p=&v

        }

    }

    p.state="3"

    fmt.Printf("A:%v\n",a)

}


牛魔王的故事
浏览 157回答 1
1回答

胡子哥哥

变量p设置为指向v,而不是切片元素。此代码设置p为指向切片元素:for i, v := range a.Barry[0].Carry {    if v.state == "2" {        p = &a.Barry[0].Carry[i]    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go