go指針原理自我分析

這是通過我得理解所模擬出的關於更好理解go指針的東西,實際底層應該還會有些小偏差,但總體方向基本沒有問題,如有錯誤,請大佬糾正。

默認定義一個任意類型的變量,底層關係如下圖

也就是說我們任意定義一個變量,就會有地址與變量兩個東西,並且通過指針相互引用

  1. 比如定一個變量a值爲1, var a int = 1
    此時就是關係圖就是

 

  1. 這時我們再定義一個指針
    1. 定義:var aPoint1 *int = &a
    2. 理解:我這裏把它理解爲xx類型的一級指針(類型),所以此處就是int類型的一級指針
    3. 指針賦值:我們定義的指針所賦的值就是指針地址(一級指針地址)【可以通過下面的二級指針相互理解】, 就好比我們定義的int賦的值是數字一個道理
    4. 指針取值:通過指針取其所對應的值通過*aPoint進行取值,得到變量1
    5. 注意:可以*&a但不可以&*a
  2. 指向指針的指針
    1. 關係圖
    2. 定義:var aPoinit2 **int = &aPoint1
    3. 理解:根據上面所說的一級指針,我們可以把它理解爲xx類型的二級指針(類型),也就是說這又是一個新的類型,雖然說他賦值的也是一個地址,但我們可以把它理解爲二級指針所需要的二級地址
    4. 指針取值
      1. 取一級指針值:*aPoint2
      2. 取實際值:**aPoint2
    5. 指針賦值
    6. 注意:不可以通過&&a直接給二級指針賦值,&&不可以連用。但如果是取值,可以連用**aPoint2, 或者三級指針的***, 以此類推
  3. 還有三級指針,指向指針的指針的指針【emmm有點皮】四級指針等等。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章