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

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

比較 Go 中的指針

比較 Go 中的指針

Go
瀟湘沐 2021-11-29 16:14:35
我在我的 Go 書中讀到指針是可比的。它說:兩個(gè)指針相等當(dāng)且僅當(dāng)它們指向同一個(gè)變量或兩者都為零。那么為什么在比較指向兩個(gè)不同變量的兩個(gè)指針時(shí),我的以下代碼打印“true”?func main() {    var p = f()    var q = f2()    fmt.Println(*p == *q) // why true?}func f() *int {    v := 1    return &v}func f2() *int {    w := 1    return &w}
查看完整描述

2 回答

?
Helenr

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

您沒有比較指針本身,因?yàn)槟褂昧恕叭∠眠\(yùn)算符” *,它返回存儲(chǔ)在該地址的值。在您的示例代碼中,您調(diào)用了返回兩個(gè)不同指針的方法。存儲(chǔ)在每個(gè)不同地址的值恰好是1. 當(dāng)您取消引用指針時(shí),您會(huì)得到存儲(chǔ)在那里的值,因此您只是在比較1 == 1哪個(gè)是真的。


比較指針本身,你會(huì)得到錯(cuò)誤;


package main


import "fmt"


func main() {

    var p = f()

    var q = f2()

    fmt.Println(*p == *q) // why true?


    fmt.Println(p == q) // pointer comparison, compares the memory address value stored

    // rather than the the value which resides at that address value


    // check out what you're actually getting

    fmt.Println(p) // hex address values here

    fmt.Println(q)

    fmt.Println(*p) // 1

    fmt.Println(*q) // 1

}


func f() *int {

    v := 1

    return &v

}


func f2() *int {

    w := 1

    return &w

}

https://play.golang.org/p/j2FCGHrp18


查看完整回答
反對(duì) 回復(fù) 2021-11-29
?
Smart貓小萌

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

package main


import "fmt"


func main() {

    var p = f()

    var q = f2()


    fmt.Println(*p == *q)

    /* is true, since *p = *q = 1 */


    fmt.Println(p == q)

    /* is false, since *p and *q store two different memory addresses */

}


func f() *int {

    v := 1

    return &v

}


func f2() *int {

    w := 1

    return &w

}

https://play.golang.org/p/i1tK4hhjOf


查看完整回答
反對(duì) 回復(fù) 2021-11-29
  • 2 回答
  • 0 關(guān)注
  • 185 瀏覽

添加回答

舉報(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)