pointers - 结构指针和整数指针输出有什么区别?

标签 pointers go

package main

import "fmt"

type Employee struct {
    ID int
    Name string
}

func main(){
    var zhexiao Employee
    zhexiao.Name = "xiao"
    fmt.Println(&zhexiao)

    x := 1
    p := &x
    fmt.Println(p)
}

以上代码输出两种指针。

  1. 结构指针输出为:&{0 xiao}
  2. 整数指针输出为:0xc0420600b0(看起来像内存地址)

为什么struct pointer输出的不是内存地址?如果不是内存地址,那是什么?

非常感谢 哲

最佳答案

这取决于你如何看待它。您正在隐式使用程序包 fmt 默认打印动词 (%v)。以下是通过显式使用其他打印动词来查看它的其他一些方法。

package main

import "fmt"

type Employee struct {
    ID   int
    Name string
}

func main() {
    var zhexiao Employee
    zhexiao.Name = "xiao"
    fmt.Printf("%[1]v %[1]p\n", &zhexiao)

    x := 1
    fmt.Printf("%[1]v %[2]p\n", x, &x)
    p := &x
    fmt.Printf("%[1]v %[1]p\n", p)
}

Playground :https://play.golang.org/p/4dV8HtiS8rP

输出:

&{0 xiao} 0x1040a0d0
1 0x1041402c
0x1041402c 0x1041402c

引用:Package fmt: Printing

关于pointers - 结构指针和整数指针输出有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51093238/

相关文章:

c++ - 如何将对象指针存储在数组中

go - 将 slice 传递到 channel 中

c++ - 指针和指向该指针的地址会导致相同的结果

c - 指针、数组和函数

Golang 结构字段与 slice 语义 : "has a" slice of structs vs "is a" slice of structs

go - 如何判断文件夹是否存在且可写?

go - 如何根据文件描述符的数量限制go例程

GO-Github API : How To Commit and Push to a remote branch

c++ - 我可以获得指向当前迭代器值的指针吗

const 导致不兼容的指针类型。为什么只针对双指针?