這是通過我得理解所模擬出的關於更好理解go指針的東西,實際底層應該還會有些小偏差,但總體方向基本沒有問題,如有錯誤,請大佬糾正。
默認定義一個任意類型的變量,底層關係如下圖
也就是說我們任意定義一個變量,就會有地址與變量兩個東西,並且通過指針相互引用
- 比如定一個變量a值爲1, var a int = 1
此時就是關係圖就是
- 這時我們再定義一個指針
- 定義:var aPoint1 *int = &a
- 理解:我這裏把它理解爲xx類型的一級指針(類型),所以此處就是int類型的一級指針
- 指針賦值:我們定義的指針所賦的值就是指針地址(一級指針地址)【可以通過下面的二級指針相互理解】, 就好比我們定義的int賦的值是數字一個道理
- 指針取值:通過指針取其所對應的值通過*aPoint進行取值,得到變量1
- 注意:可以*&a但不可以&*a
- 指向指針的指針
- 關係圖
- 定義:var aPoinit2 **int = &aPoint1
- 理解:根據上面所說的一級指針,我們可以把它理解爲xx類型的二級指針(類型),也就是說這又是一個新的類型,雖然說他賦值的也是一個地址,但我們可以把它理解爲二級指針所需要的二級地址
- 指針取值:
- 取一級指針值:*aPoint2
- 取實際值:**aPoint2
- 指針賦值:
- 注意:不可以通過&&a直接給二級指針賦值,&&不可以連用。但如果是取值,可以連用**aPoint2, 或者三級指針的***, 以此類推
- 關係圖
- 還有三級指針,指向指針的指針的指針【emmm有點皮】四級指針等等。。。