go 的指標理解

2021-08-25 17:03:43 字數 750 閱讀 9998

都說go指著跟 c 的比較像,其實不是很明白普通變數和指標的區別

看到有人說 其實 普通變數 是程式創造出來的,比如說 c 中

a int
那麼在編譯時 就會有 [a 位址 int] 這樣來標識記憶體

普通變數a其實是語言本身創造了,是為了更方便的表示記憶體。我們對a進行訪問其實就是直接對記憶體進行訪問。至於a表示的記憶體的位址是多少,程式設計師一般不用關心。編譯器會自動分配位址,也就是常說的為a分配乙個位址。如果想知道a的位址也可以通過&a得知。

我的理解是 普通變數 就像是 房間(記憶體)外面的 門牌號(總經理室),指標就是這個房間的位址(a座701)

變數是執行時系統給這個記憶體起的別名,記憶體位址是唯一的,程式中當我想拿到這個記憶體的值的時候,因為知道它的別名,所以直接用別名訪問就可以得到值,又或者我能知道它唯一的位址我也能得到它的值,其實是兩種不同的記憶體訪問方式,但是變數是會變的,位址是不會變的。比如在go中

package main

func main()

看到有個解釋還可以,是說指標和普通變數區別的

1+2這個表示式永遠得值3 

a+b這個表示式只依賴於a,b的值—–按名字訪問稱為直接訪問 

*p + *q 這個表示式的值隨著p,q指向的變數不同而不同—-按指標訪問稱為間接訪問

直接代表簡單—-用槍剌只能剌到對手的正面 

間接代表靈活—-用三截棍卻能打到對手的背面

go 指標陣列 go語言中的指標陣列

宣告乙個包含有5個整數指標型別的陣列,我們可以在初始化時給相應位置的元素預設值。下面是給索引為0的元素乙個新建的的int型別指標 預設為0 給索引為1的元素指向值v的位址,剩下的沒有指定預設值的元素為指標的zero值也就是nil package main import fmt func main f...

go包的理解

結論 import時指定的字串,是相對於 gopath的目錄路徑,告訴了go,要去載入這個目錄下所有的包檔案 不包括子目錄中的檔案 乙個目錄中所有的原始檔 不包括子目錄 代表了單獨的乙個包,這些原始檔內的package關鍵字指出的包名,必須一致,否則無法被使用 import指定的載入目錄 目錄中的原...

C語言指標的理解以及指標的指標的理解

指標指向的是記憶體位址編號,記憶體位址編號指向的是對應的內容。我們需要乙個變數,來儲存記憶體位址編號,這個變數的值是乙個記憶體位址編號,但是我們可以通過修改變數的值,來不斷的改變記憶體位址編號。但是,我們如果需要改變該記憶體位址編號的值時,就需要對該記憶體位址編號的值進行修改,而不改變記憶體位址編號...