打印指针变量

时间:2018-08-21 17:18:48

标签: go

我在q&q下创建了2个Vertex对象。

现在,当我打印指针变量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)
}

Playground

2 个答案:

答案 0 :(得分:2)

来自https://golang.org/pkg/fmt/

  

Println格式使用其操作数的默认格式

如果要以特定方式打印,则需要使用fmt.Printf()并提供所需的格式。

答案 1 :(得分:1)

fmt.Println(...) function“ [使用]其操作数的默认格式”,并根据fmt package header documentation

%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