2014-04-02 80 views
3

地址我在C一些exp和我完全新到golang打印片的在golang

func learnArraySlice() { 
intarr := [5]int{12, 34, 55, 66, 43} 
slice := intarr[:] 
fmt.Printf("the len is %d and cap is %d \n", len(slice), cap(slice)) 
fmt.Printf("address of slice 0x%x add of Arr 0x%x \n", &slice, &intarr) 

}

現在golang切片是陣列的參考其中包含指向一個數組len和slice的片段,但是這個片也將被分配到內存中,我想要打印該內存的地址。但無法做到這一點。

回答

3

對於切片底層陣列和陣列(它們是在你的例子是相同的)的地址,

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 \n", len(slice), cap(slice)) 
    fmt.Printf("address of slice %p add of Arr %p\n", &slice[0], &intarr) 
} 

輸出:

the len is 5 and cap is 5 
address of slice 0x1052f2c0 add of Arr 0x1052f2c0 
8

片和它們的元素是可尋址:

s := make([]int, 10) 
fmt.Printf("Addr of first element: %p\n", &s[0]) 
fmt.Printf("Addr of slice itself: %p\n", &s) 
+1

我沒有看到源代碼,但是'fmt.Printf(「第一個元素的地址:%p \ n」,s)'也是工作。這是有道理的,當你想到'fmt.Printf(「%v」,s)'打印底層數組的元素。 – Nesze