第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么函數(shù)執(zhí)行后值會(huì)發(fā)生變化?

為什么函數(shù)執(zhí)行后值會(huì)發(fā)生變化?

Go
慕標(biāo)5832272 2023-04-24 16:03:57
我目前正在自學(xué)圍棋,但我無法理解某種行為:package mainimport (    "fmt")type List struct {    n int}func (l List) Increment() {    l.n += 1    l.LogState() // size: 1}func (l List) LogState() {    fmt.Printf("size: %v\n", l.n)}func main() {    list := List{}    list.Increment()    fmt.Println("----")    list.LogState() // size: 0}https://play.golang.org/p/-O24DiNPkxxLogState被執(zhí)行兩次。最初,在Increment通話期間,它打印size: 1但I(xiàn)ncrement返回后打印size: 0。為什么這些值不同?
查看完整描述

2 回答

?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊

您的節(jié)點(diǎn)未添加到原始 linkedList 的原因是因?yàn)槟鷽]有使用指向該結(jié)構(gòu)的指針。因此,即使Increment示例代碼中的函數(shù)更改了值。結(jié)構(gòu)的副本被更改,而不是實(shí)際的結(jié)構(gòu)。

您可以使用指針接收器聲明方法。這意味著接收者類型對(duì)于某些類型 T 具有文字語法 *T。(此外,T 本身不能是指針,例如 *int。)

如果您想更改 linkedlistNode 結(jié)構(gòu)計(jì)數(shù)器以顯示添加到列表中的節(jié)點(diǎn),您應(yīng)該在兩種方法上使用指針類型接收器來修改鏈表:

func?(l?*LinkedList)?AddInitialValue(v?interface{})
func?(l?*LinkedList)?LogState()

并在 main 內(nèi)部將地址傳遞給 linkedList 以將這些指針類型接收器用作:

func?main()?{
????list?:=??&LinkedList{}
????list.AddInitialValue(9)

????fmt.Println("----")
????list.LogState()?//?size:?0
????}

筆記:-

使用指針接收器有兩個(gè)原因。

  • 修改其接收者指向的值。

  • 避免在每次方法調(diào)用時(shí)復(fù)制值。如果接收者是一個(gè)大結(jié)構(gòu),這會(huì)更有效


查看完整回答
反對(duì) 回復(fù) 2023-04-24
?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊

使用IncrementLogState定義了您定義它們的方式,您只使用的值的副本List。這意味著如果您在函數(shù)內(nèi)部進(jìn)行一些更改,它們僅在的函數(shù)范圍Increment內(nèi)可見,并且僅在該特定范圍存在的其余部分可見。Increment要確認(rèn)您始終使用初始值的副本List,您可以&list在執(zhí)行Increment函數(shù)之前和&l在同一函數(shù)內(nèi)部進(jìn)行記錄。

如果你想讓更改永久化,你應(yīng)該使用指向內(nèi)存地址的指針。這意味著你的函數(shù)應(yīng)該這樣定義:

func (l *List) Increment()
func (l *List) LogState()

這樣,您將傳遞一個(gè)內(nèi)存引用(指向內(nèi)存中地址的指針),并且每次更改 的值時(shí)l,您都會(huì)在傳遞的內(nèi)存引用上更改它,并且它會(huì)在任何地方反映出來。


查看完整回答
反對(duì) 回復(fù) 2023-04-24
  • 2 回答
  • 0 關(guān)注
  • 175 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)