我试图理解go中的指针,但是我仍然对它们的工作方式有些困惑。
我已经在SO上看到了另一个问题:print the Address of slice in golang,How do I print the pointer value of a Go object? What does the pointer value mean?,但仍然无法确定这个概念。
package main
import (
"fmt"
)
func main() {
numbers := myNumbers{42}
println("Pointer to numbers",&numbers)
numbers.printSlice()
numbers.printPointer()
}
type myNumbers []int
func (m myNumbers) printSlice() {
fmt.Printf("printSlice - value of m: %p \n",m)
fmt.Printf("printSlice - value of &m: %p\n",&m)
}
func (m *myNumbers) printPointer() {
fmt.Printf("printPointer - value of m: %p\n",m)
fmt.Printf("printPointer - value of &m: %p\n",&m)
}
输出为:
Pointer to numbers 0xc42000a060
printSlice - value of m: 0xc420016100
printSlice - value of &m: 0xc42000a080
printPointer - value of m: 0xc42000a060
printPointer - value of &m: 0xc42000c030
根据printSlice
中的go文档,第一行将打印数组第一个元素的地址,第二行将打印slice header的副本地址
在printPointer
中,第一行将打印指针的值,第二行将打印指针的地址
在main
prinln
中打印与printPointer
第一行相同的地址,这是否意味着在printPointer
中我有一个指针指向原始指针?
以上假设是否正确?