指標的基本意義是儲存某些值所在的記憶體位址。 中 的變數必然可以取出地址。 變量,就是一塊記憶體區域中儲存的值[1]。不只我們熟悉的 var x int 中的 x 是變量,一個比較複雜的表達式也可以表示一個變量,例如sliceA[0],mapB["key"],以及structC.FieldD。也就是說,他們都可以有自己的指針。
當我們需要修改結構體的變數內容的時候,方法傳入的結構體變數參數需要使用指針,也就是結構體的位址,需要修改map中的架構體的變數的時候也需要使用結構體位址作為map的value。Go 可以直接新建struct 的指標
在golang 中,我們可以透過ptr := &A{Value: 1},就得到了一個結構體A 值的指標;但在C 中就無法透過單獨的賦值語句得到:typedef struct {
int value;
}
A;A *ptr1; // 无法给 ptr 所指的值赋值
A *ptr2 = &A{1}; // 没有这样的语法
A a = {1}; // 再通过 &a 可以得到指针
如果說這個差異只是語法上的表象,另外一個差異可能就是事關bug 的差別了。
#在上面的C 程式碼舉例中,我們確實可以宣告一些變量,但如果這些宣告是在一個方法內完成的,例如:A *init(){
A *ptr;
return ptr;}
或
A *init(){ A a; return &a;}
那麼,這個宣告出來的局部變量,是一種自動變數(automatic variable[3]),原方法,也就是init() 方法,結束後,這些自動變數就「消失」了。
以上是golang 指針怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!