理解 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中文網其他相關文章!