go
語言中的指標非常簡單,沒有偏移和運算,只需要記住兩個符號。&
取變數位址與*
根據位址取值。
以下是乙個簡單的示例:
package main
import (
"fmt"
)func main()
var addarr = &arr
fmt.printf("%p \n",addarr) // 列印位址 0xc000062330
fmt.printf("%v \n",*addarr) // 根據位址列印值
}
當我們使用&
取出乙個變數的記憶體位址時,可以通過%t
檢視其指標型別。
go
語言中的值型別(int、float、bool、string、array、struct)都有對應的指標型別,如:*int
、*int64
、*string
等。
package main
import (
"fmt"
)func main()
以下示例中宣告了乙個指標變數,但是該指標指向的記憶體位址還沒有被go
進行分配,賦值會引發異常。
package main
import (
"fmt"
)func main()
new()
是乙個內建的函式,用於對乙個指標變數開闢記憶體空間。 為了解決上面記憶體空間未被開闢的問題,可以使用該函式進行開闢。
注意,實際開發中new
用的並不多。
package main
import (
"fmt"
)func main()
make()
同new()
相同,都是進行記憶體空間開闢的,但是它只針對slice
、map
、chan
的記憶體建立,並且它返回的值是這三個型別的本身,這三種型別不是屬於值型別,而是屬於引用型別,故我們可以不使用變數對其進行接收。
注意,在宣告上述三種型別時,都需要使用make
進行記憶體建立。
package main
import (
"fmt"
)func main()
指標取值與指標位址
取位址操作符&
和取值操作符*
是一對互補操作符,&
取出位址,*
根據位址取出位址指向的值。
new與make的區別
二者都是用來做記憶體分配的。
make
只用於slice
、map
以及channel
的初始化,返回的還是這三個引用型別本身;
而new
用於型別的記憶體分配,並且記憶體對應的值為型別零值,返回的是指向型別的指標。
GO相關 變數
宣告變數 宣告變數的一般形式是使用 var 關鍵字 var name type go語言的基本型別 type 有 bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte uint8 的別名...
Go 語言指標
b 什麼是指標 b 乙個指標變數指向了乙個值的記憶體位址。類似於變數和常量,在使用指標前你需要宣告指標。指標宣告格式如下 var var name var type var type 為指標型別,var name 為指標變數名,號用於指定變數是作為乙個指標。以下是有效的指標宣告 var ip int...
GO語言指標
以前學習的語言裡沒有指標操作,剛接觸到go語言指標,消化的比較慢,故寫一下。指標型別宣告 t,指標的型別為 t,例 var i int 指標型別的值 t 在等號左邊表示指標宣告var a int 32 p a p的值是指向a的位址在指標前加 獲取指標p指向的值,例 var a int 32 變數宣告...