初學者在學習Go語言時,遇到Pointer都很頭痛,不容易理解Pointer的概念,今天就要用簡單的圖表及表達方式,解釋什麼是Pointer,Let’s Go!
Pointer基本用法及概念
// 宣告變數
name := “bill”// 取出變數的位址(address)
namePointer := &name// 取出指標所指向的記憶體位置的值
name = *namePointer
1. 宣告變數
在宣告變數時,系統會分配記憶體讓程式暫存,像是上圖,宣告一個變數,名稱叫做”name”,並指向 0xc42007a1c0這個位置,該位置的內容值為”bill”
2. 取出變數的位址(address)
宣告一個變數,名稱叫做”namePointer”,並指向0xc42008c018這個位置,該位置的內容值為”0xc42007a1c0”,結構跟變數一模一樣,只是內容值放的是某個記憶體位置.
Hank認為,Pointer也算一種變數型態,該變數型態存放的值是記憶體位置
3. 取出指標所指向的記憶體位置的值
有了上述的概念後,自然能容易理解 “取出指標所指向的記憶體位置的值”
真的假的?有沒有程式碼秀一下~
這是一個簡單的Go程式,印出變數、參數的位置(address)及值(value)
思考一下,在Go的function中,參數的傳遞是pass by value,那如果傳遞參數是Pointer會發生什麼事?
答案是在function會建立一個新的Pointer,其內容值是namePointer的值,這確實是pass by value,只是該value是一個記憶體位置.
所以透過Pointer的操作還是能夠在function操作scope以外的變數.
結語
Pointer的概念確實不好懂,Hank也是思考了好幾天,才有這些概念,希望能夠幫助喜歡且正在學習Go的朋友
如有任何問題或批評指教,歡迎您告訴我!
請各位給我點掌聲!謝謝各位的觀賞.