首頁 >後端開發 >Golang >Go 中的指標解引用如何運作,與 C/C 相比如何?

Go 中的指標解引用如何運作,與 C/C 相比如何?

Linda Hamilton
Linda Hamilton原創
2024-12-10 07:01:13142瀏覽

How Does Pointer Dereferencing Work in Go, and How Does It Compare to C/C  ?

理解 Go 中的指標解引用

指標引用是 Go 中的基本操作,涉及存取指標變數指向的值。在問題中提到的範例中,指標用於操作自訂結構體 Vertex。

指標和結構

原始範例展示了 Vertex 實例的創建,包括使用指標針對 Vertex 實例的參考。在修改後的範例中,發生以下情況:

t := *q
q.X = 4

第一行取消引用指標 q 並將其基礎值指派給 t,從而有效地建立指向的頂點的副本。隨後,修改 q.X 會更新原始 Vertex 實例,但不會影響 t,因為 t 保存該結構的單獨副本。

避免使用指標帶來意外

以確保更改透過指標所做的操作會反映在其他引用中,因此指標的使用應保持一致。在下面修改後的範例中,t 和q 都指向相同的底層Vertex:

t := q

透過此更改,q.X = 4 現在更新t 和q 存取的Vertex 實例,從而產生預期的輸出:

{1 2} &{4 2} {1 0} {0 0} &{4 2} {4 2} true

C/C中的並行

與「極其奇怪的行為」的看法相反,當涉及指針時,C/C 表現出類似的行為。以下C 程式碼示範了這一點:

Vertex v = Vertex{1, 2};
Vertex* q = &v;
Vertex t = *q;
q->x = 4;
std::cout << "*q: " << *q << "\n";
std::cout << " t: " << t << "\n";

輸出類似於修改後的Go 範例:

*q: { 4, 2 }
t: { 1, 2 }

因此,Go 中觀察到的指標取消引用行為與指標的行為一致在其他程式語言中,例如C/C 。

以上是Go 中的指標解引用如何運作,與 C/C 相比如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn