我有C方面的经验,对golang完全陌生
1 2 3 4 5 6 7 | func learnArraySlice() { intarr := [5]int{12, 34, 55, 66, 43} slice := intarr[:] fmt.Printf("the len is %d and cap is %d ", len(slice), cap(slice)) fmt.Printf("address of slice 0x%x add of Arr 0x%x ", &slice, &intarr) |
}
现在在golang slice中是array的引用,其中包含指向slice的数组len和slice的上限的指针,但是该slice也将分配在内存中,我想打印该内存的地址。 但是无法做到这一点。
http://golang.org/pkg/fmt/
1 2 | fmt.Printf("address of slice %p add of Arr %p ", &slice, &intarr) |
切片及其元素是可寻址的:
1 2 3 4 5 | s := make([]int, 10) fmt.Printf("Addr of first element: %p ", &s[0]) fmt.Printf("Addr of slice itself: %p ", &s) |
-
我还没有真正查看源代码,但是
fmt.Printf("Addr of first element: %p 也可以。 当您考虑
", s)fmt.Printf("%v", s) 打印基础数组的元素时,这很有道理。
对于切片基础数组和数组的地址(在您的示例中它们是相同的),
1 2 3 4 5 6 7 8 9 10 11 12 | package main import"fmt" func main() { intarr := [5]int{12, 34, 55, 66, 43} slice := intarr[:] fmt.Printf("the len is %d and cap is %d ", len(slice), cap(slice)) fmt.Printf("address of slice %p add of Arr %p ", &slice[0], &intarr) } |
输出:
1 2 | the len is 5 and cap is 5 address of slice 0x1052f2c0 add of Arr 0x1052f2c0 |