go語言記憶體,位址,指標

2021-09-24 21:49:41 字數 1492 閱讀 7152

指標就是位址

列印出變數的記憶體和位址

&a可以取到a的位址

簡單說可以說位址就是索引,就是門牌號,記憶體就是倉庫,裡面存了東西,存了值

package main

import

"fmt"

func

main()

int儲存int的位址,**int儲存int的位址

//定義乙個變數p,型別為*int

var p *

int//指標變數指向誰,就把誰的位址給指標變數

//現在p就是a的16進製制的位址

p=&a

現在*p操作的不是記憶體,不是1,2,3,而是p的位址

*p=

666

使用 nil 代替其他語言的 null,也就是 nil 表示空

go的指標比c好用不需要 ->,而是用 . 表示

var p *

intp =

nil

使用指標時注意,指標一定要有指向

來個錯誤例項

var p *

intp =

nil*p=

666//會報錯,沒有指定memory

再來個正確示範

var p *

intp =

nila:=

10//此時p就指向了a的位址不管指向什麼,一定要有指向

p=&a

*p=666

go裡面比c好用的地方就是,我們new完的記憶體空間不需要釋放,go有gc,節省了開發時間

var p *

int//讓p指向乙個合法的記憶體空間

//因為p是*int型別的,所以new裡面也要int型別

p =new

(int

)*p=

666

也可以使用自動推導型別

//因為new裡面也要int型別,所以自動推導出p是*int型別

p :=

new(

int)

*p=666

在方法swap中,其實傳遞的是a,b的記憶體,同時a,b int的時候,新建了兩個a,b的引用變數,所以才會導致輸出不同

方法裡輸出的是方法中的a,b

可以把看做a,b只是乙個殼子,用來儲存值

而swap方法入參時自己會新建乙個a,b的空殼子(a,b int)

func swap (a,b int

)func

main()

位址交換就能把值交換成功

func swap (a,b *

int)

func

main()

C語言記憶體位址

任務清單 c語言在記憶體中一共分為5個區域 記憶體棧區 存放區域性變數名 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等,函式呼叫結束後釋放記憶體空間。通常是用於那些在編譯期間就能確定儲存大小的變數的儲存區,用於在函式作用域內建立,在離開作用域後自動銷毀的變數的儲存區。通常是區域性變數,函...

go語言關於切片型別記憶體位址的理解

學習go語言切片型別時遇到了這樣乙個問題。首先,在go中,切片型別的變數實際上存放的是乙個位址,該位址即為其引用的底層陣列的第乙個元素的位址,也可以說是這個陣列的位址。如圖所示,建立乙個名為s的切片 var s int變數s儲存在棧區,其位址為0x000050420,而其值並不是陣列 1,2,3 而...

(語法)記憶體位址和指標《一》

根據這段時間的學習深深感覺到應該要深入理解記憶體機制和指標的用法真的很重要,這是第一篇,也是目前對記憶體和指標的認識的總結。記憶體 就好像乙個容器,可以裝納資料在裡面,這個容器不是一整塊的,它是分了很多很多的小格仔,即記憶體中的位,每個格仔裝乙個0或者1,而我們要放到容器中的資料實際上也是要將他分解...