兄弟連go教程(6)指標
⽀支援指標型別 *T,指標的指標 **T,以及包含包名字首的 *<package>.T。
•預設值 nil,沒有 NULL 常量。
•操作符 "&" 取變數地址,"*" 透過指標訪問⺫⽬目標物件。
•不⽀支援指標運算,不⽀支援 "->" 運算子,直接⽤用 "." 訪問⺫⽬目標成員。
輸出:
不能對指標做加減法等運算。
可以在 unsafe.Pointer 和任意型別指標間進⾏行轉換。
輸出:
返回區域性變數指標是安全的,編譯器會根據需要將其分配在 GC Heap 上。
將 Pointer 轉換成 uintptr,可變相實現指標運算。
輸出:
•預設值 nil,沒有 NULL 常量。
•操作符 "&" 取變數地址,"*" 透過指標訪問⺫⽬目標物件。
•不⽀支援指標運算,不⽀支援 "->" 運算子,直接⽤用 "." 訪問⺫⽬目標成員。
func main() {
type data struct{ a int }
var d = data{1234}
var p *data
p = &d
fmt.Printf("%p, %v\n", p, p.a) // 直接⽤用指標訪問⺫⽬目標物件成員,⽆無須轉換。
}
輸出:
0x2101ef018, 1234
不能對指標做加減法等運算。
x := 1234
p := &x
p++ // Error: invalid operation: p += 1 (mismatched types *int and int)
可以在 unsafe.Pointer 和任意型別指標間進⾏行轉換。
func main() {
x := 0x12345678
p := unsafe.Pointer(&x) // *int -> Pointer
n := (*[4]byte)(p) // Pointer -> *[4]byte
for i := 0; i < len(n); i++ {
fmt.Printf("%X ", n[i])
}
}
輸出:
78 56 34 12
返回區域性變數指標是安全的,編譯器會根據需要將其分配在 GC Heap 上。
func test() *int {
x := 100
return &x // 在堆上分配 x 記憶體。但在內聯時,也可能直接分配在⺫⽬目標棧。
}
將 Pointer 轉換成 uintptr,可變相實現指標運算。
func main() {
d := struct {
s string
x int
}{"abc", 100}
p := uintptr(unsafe.Pointer(&d)) // *struct -> Pointer -> uintptr
p += unsafe.Offsetof(d.x) // uintptr + offset
p2 := unsafe.Pointer(p) // uintptr -> Pointer
px := (*int)(p2) // Pointer -> *int
*px = 200 // d.x = 200
fmt.Printf("%#v\n", d)
}
輸出:
struct { s string; x int }{s:"abc", x:200}
注意:GC 把 uintptr 當成普通整數物件,它⽆無法阻⽌止 "關聯" 物件被回收。
尹成老師
QQ77025077
微信18510341407
所有視訊在尹成學院
www.yinchengxueyuan.com
尹成百度雲請聯絡QQ475318423
相關文章
- 兄弟連go教程(5)字串Go字串
- 兄弟連go教程(2)型別-常量Go型別
- 兄弟連go教程(3)基本型別Go型別
- 兄弟連go教程(16)資料 - ArrayGo
- 兄弟連go教程(17)資料 - SliceGo
- 兄弟連go教程(18)資料 - MapGo
- 兄弟連go教程(19)資料 -StructGoStruct
- 兄弟連go教程(1)型別-變數Go型別變數
- 兄弟連go教程(7)自定義型別Go型別
- 兄弟連go教程(10)表示式 - 控制流Go
- 兄弟連go教程(12)函式 - 變參Go函式
- 兄弟連go教程(9)表示式-初始化Go
- 兄弟連go教程(13)函式 返回值Go函式
- 兄弟連go教程(14)函式 - 匿名函式Go函式
- 兄弟連go教程(15)函式 - 延遲呼叫Go函式
- 兄弟連go教程(19)資料 - 匿名欄位Go
- 兄弟連go教程(19)資料 - ⾯物件導向Go物件
- 兄弟連go教程(4)型別-引用及轉換Go型別
- 兄弟連go教程(8)表示式--保留字;運算子Go
- 兄弟連go教程(11)函式 - 函式定義Go函式
- 兄弟連go教程(15)函式 - 錯誤處理Go函式
- GO 指標Go指標
- Go 陣列指標(指向陣列的指標)Go陣列指標
- GO 空指標和nilGo指標
- GO語言————4.9、指標Go指標
- go 語言指標學習Go指標
- GO切片傳值/引用/指標Go指標
- 兄弟連golang神技(1)-關於 Go 語言的介紹Golang
- Go: 指標方法與值方法<->指標型別與值型別Go指標型別
- Go 語言指標符號 *和&Go指標符號
- Go語言什麼時候該使用指標 與 指標使用分析Go指標
- 兄弟連百度應用開發系列視訊教程
- 徹底學會 Go 指標 -- 就要學習 Go 語言Go指標
- Go 基礎教程--6 陣列 ArrayGo陣列
- golang二級指標操作連結串列Golang指標
- 清華尹成帶你實戰GO案例(63)Go 指標Go指標
- go 方法接受者 是指標型別和非指標型別的 區別Go指標型別
- C指標原理(6)-C內嵌彙編指標