Go中取址符(&)取的到底是記憶體地址,還是指標變數?

ldh33514發表於2019-06-01

** 最近在書上看到一個例子:**

package main

import "fmt"

func main() {
    var a = [3]int{1, 2, 3}
    var b = &a // & 應該是取址符,變數b就應該是陣列a在記憶體中的地址,那麼為什麼b[1]可以自加
    b[1]++
    fmt.Println(a, *b)
}

** 對於取址符有了一些疑問,根據這個例子,單獨寫了一段 demo 程式碼:**

package main

import "fmt"

func main() {
    var a = []int{1,2,3} // or var a = 3
    var b = &a
    fmt.Println(b)
}

** 經過測試 dmeo 程式碼中,如果變數 a 為基本型別(例如:int、float、string 等),則變數 b 返回的就是變數 a 在記憶體中的地址,但是如果變數 a 為複合型別(例如:陣列、切片),則變數 b 返回的是指標變數,且可以當作複合型別的變數直接使用(例如:b[1]++),為什麼 Go 中的&符返回的東西不一致呢?**

更多原創文章乾貨分享,請關注公眾號
  • Go中取址符(&)取的到底是記憶體地址,還是指標變數?
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章