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

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

golang為什么比較指向結(jié)構(gòu)的兩個變量的行為不同?

golang為什么比較指向結(jié)構(gòu)的兩個變量的行為不同?

Go
弒天下 2022-11-08 14:50:22
我創(chuàng)建了同一個結(jié)構(gòu)的兩個實(shí)例,當(dāng)我比較兩個變量指向結(jié)構(gòu)的實(shí)例時,輸出感到困惑。package mainimport "fmt"type Person struct {    name string}func main() {   p1 := &Person{name: "guru"}   p2 := &Person{name: "guru"}   fmt.Println(p1 == p2) // false, compares by address?   p3 := Person{name: "guru"}   p4 := Person{name: "guru"}   fmt.Println(p3 == p4) // true , why? compares by content?}== 運(yùn)算符是否像重載運(yùn)算符一樣工作?
查看完整描述

3 回答

?
12345678_0001

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

p1 == p2是指針比較,它比較指針值(內(nèi)存地址)。由于您使用了 2 個復(fù)合文字(并獲取了它們的地址),它們將指向 2 個不同的變量,因此地址將不同(因?yàn)榇笮?code>Person不為零)。規(guī)范:復(fù)合文字:

獲取復(fù)合文字的地址會生成一個指針,該指針指向使用該文字的值初始化的唯一變量。

p3 == p4比較 struct 值,它逐個字段地比較它們,并且由于匹配的字段具有相等的值,因此比較將導(dǎo)致true.

比較規(guī)則在規(guī)范中:比較運(yùn)算符

相等運(yùn)算符 == 和 != 適用于可比較的操作數(shù)。排序運(yùn)算符 <、<=、> 和 >= 適用于已排序的操作數(shù)。這些術(shù)語和比較結(jié)果定義如下:

  • [...]

  • 指針值是可比較的。如果兩個指針值指向同一個變量,或者兩者的值都為零,則它們的值相等。指向不同的零大小變量的指針可能相等,也可能不相等。

  • [...]

  • 如果結(jié)構(gòu)值的所有字段都是可比較的,則結(jié)構(gòu)值是可比較的。如果它們對應(yīng)的非空白字段相等,則兩個結(jié)構(gòu)值相等。


查看完整回答
反對 回復(fù) 2022-11-08
?
青春有我

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

你的第一個例子


p1 := &Person{name: "guru"}

p2 := &Person{name: "guru"}


fmt.Println(p1 == p2) // false, compares by address?

比較兩個指針是否相等。由于它們各自尋址不同的內(nèi)存地址,因此不相等。


你的第二個例子,


 p3 := Person{name: "guru"}

 p4 := Person{name: "guru"}


fmt.Println(p3 == p4) // true , why? compares by content?

比較兩個結(jié)構(gòu)并按值進(jìn)行比較,因此它們比較相等。


如果在比較之前取消引用指針,您會發(fā)現(xiàn)它們比較相等。例如,給定


p1 := &Person{ name: "guru" }

p2 := &Person{ name: "guru" }

p3 :=  Person{ name: "guru" }

p4 :=  Person{ name: "guru" }

以下所有內(nèi)容均相等:

  • *p1 == *p2

  • *p1 ==  p3

  • p3 == *p2

  • p3 ==  p4


查看完整回答
反對 回復(fù) 2022-11-08
?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個贊

兩個指針值只有在它們指向內(nèi)存中的相同值或者它們在 Golang 中為 nil 時才相等。您創(chuàng)建了兩個結(jié)構(gòu)實(shí)例,因此它們具有不同的地址

   p1 := &Person{name: "guru"}
   p2 := &Person{name: "guru"}


查看完整回答
反對 回復(fù) 2022-11-08
  • 3 回答
  • 0 關(guān)注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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