猿问

打印指针变量

我在下面创建了 2 个 Vertex 对象——q 和 q。


现在,当我打印指针变量 q = &Vertex 时,我希望它是内存地址,为什么它打印 - &{1,2}


输出:


{1 2} &{1 2}

程序:


package main


import "fmt"


type Vertex struct {

    X, Y int

}


var (

    p = Vertex{1, 2}  // has type Vertex

    q = &Vertex{1, 2} // has type *Vertex

)


func main() {

    fmt.Println(p, q)

}

操场


RISEBY
浏览 141回答 2
2回答

largeQ

来自https://golang.org/pkg/fmt/:Println 格式使用其操作数的默认格式如果要以特定方式打印,则需要使用fmt.Printf()并提供所需的格式。

Smart猫小萌

函数fmt.Println(...)“ [使用]其操作数的默认格式”并根据fmt包头文档:%v  the value in a default format...struct:             {field0 field1 ...}...pointer to above:   &{}, &[], &map[]所以以下几行实际上是相同的:fmt.Println(p, q)fmt.Printf("%v %v\n", p, q)如果你想打印指针的内存地址,那么你应该使用%p格式动词:Pointer:%p  base 16 notation, with leading 0x例如:fmt.Printf("%p\n", q) // => 0x1953e4
随时随地看视频慕课网APP

相关分类

Go
我要回答