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

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

具有指針接收器與值的方法,值與指針之間的轉(zhuǎn)換

具有指針接收器與值的方法,值與指針之間的轉(zhuǎn)換

Go
交互式愛(ài)情 2022-08-30 15:10:56
作為學(xué)習(xí)指針與值接收器的一部分,我提到了:https://gobyexample.com/methods// This `area` method has a _receiver type_ of `*rect`.func (r *rect) area() int {    return r.width * r.height}// Methods can be defined for either pointer or value// receiver types. Here's an example of a value receiver.func (r rect) perim() int {    return 2*r.width + 2*r.height}func main() {    r := rect{width: 10, height: 5}    // Here we call the 2 methods defined for our struct.    fmt.Println("area: ", r.area())    fmt.Println("perim:", r.perim())    // Go automatically handles conversion between values    // and pointers for method calls. You may want to use    // a pointer receiver type to avoid copying on method    // calls or to allow the method to mutate the    // receiving struct.    rp := &r    fmt.Println("area: ", rp.area())    fmt.Println("perim:", rp.perim())}我不明白-->rp := &r   rp is a pointer or address of r為什么結(jié)果:rp.area()  is identical to r.area() rp.perim()  is identical to r.perim()指針 :它們是內(nèi)存中 var 的地址。功能區(qū)() 需要一個(gè)指針接收器。所以這是明確的rp.area()(因?yàn)閞p是r的指針或地址)但是為什么這個(gè)r.area()?r 不是指針,而是值同樣,perim需要一個(gè)值,我們使用指針作為接收器?rp.perim()這也意味著什么:您可能希望使用指針接收器類型,以避免在方法調(diào)用時(shí)進(jìn)行復(fù)制,或允許方法改變接收結(jié)構(gòu)。to avoid copying on method calls or to allow the method to mutate the receiving struct.
查看完整描述

1 回答

?
LEATH

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

您需要了解指針是什么,以便了解這里發(fā)生了什么。指針包含另一個(gè)變量的地址。

這兩種類型的接收器不同,一種(指針)需要地址,另一種(值)期望不是地址。

現(xiàn)在,回答你的第一個(gè)問(wèn)題:“為什么結(jié)果是一樣的?

首先,是指向 的指針。這意味著 中包含的內(nèi)容是 的地址。因此,兩者最終都引用相同的結(jié)構(gòu)(直接包含它和指向它的地址)。所以最后它是同一個(gè)結(jié)構(gòu)。rprrprrrprrp

此外,原因和可以與指針和值接收器一起使用的原因是:Go在調(diào)用時(shí)自動(dòng)獲取包含在地址中的內(nèi)容(作為值接收器需要不是地址),并且它會(huì)自動(dòng)獲取用于調(diào)用時(shí)傳遞的地址(作為指針接收器需要一個(gè)地址)。rrprpperim()rarea()

回答你的第二個(gè)問(wèn)題:“這是什么意思...?

要理解這一點(diǎn),您需要知道 Go 中的所有函數(shù)都使用按值傳遞。這意味著,當(dāng)您將具有許多字段的結(jié)構(gòu)傳遞給函數(shù)時(shí),整個(gè)結(jié)構(gòu)及其所有字段將被復(fù)制到要在函數(shù)內(nèi)部使用的新變量中。但是,如果傳遞指針(具有許多字段的結(jié)構(gòu)的地址),則僅將該地址復(fù)制到要在函數(shù)內(nèi)部使用的變量中 - 這大大減少了復(fù)制。


查看完整回答
反對(duì) 回復(fù) 2022-08-30
  • 1 回答
  • 0 關(guān)注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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