為什麼數組與空結構的比較會產生不同的結果
給定一個指向空結構的指標數組,為什麼數組的相等比較會產生不同的結果有時評估為true,有時評估為true false?
行為探索
package main import "fmt" type myStruct struct{} func main() { s, ss := myStruct{}, myStruct{} arr1 := [6]*myStruct{&s} arr2 := [6]*myStruct{&ss} fmt.Println(&s == &ss, arr1 == arr2) // Produces mixed results (e.g., false, true or true, false) l, ll := myStruct{A: 1}, myStruct{A: 1} arr3 := [6]*myStruct{&l} arr4 := [6]*myStruct{&ll} fmt.Println(&l == &ll, arr3 == arr4) // Always evaluates to false }
解釋
Go 語言規範指出:
兩個不同的零大小變數在記憶體中可能具有相同的位址。
動態行為與逃脫分析
在第二個範例中,新增 fmt.Printf 呼叫(同時轉義 s 和 ss)會導致編譯器移動變數到堆,導致不同的記憶體位址,從而產生 false for &l == &ll.
以上是為什麼指標數組與空結構的比較會產生不一致的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!