Golang中具有%v和%p的指针的零值

  • 本文关键字:指针 Golang go pointers
  • 更新时间 :
  • 英文 :


我混淆了指针的%p和%v格式谓词提供的输出

var a *int
// zero value of a is:
fmt.Printf("%v", a) // <nil>
// using %p 
fmt.Printf("%p", a) // 0x0

我们知道%v使用%p作为默认格式化程序,那么为什么%v显示<nil>作为输出呢?

未初始化指针的零值是<nil>,那么为什么%p输出0x0呢?

根据Go文档,%p使用以0x开头的16进制表示法,如果是,<nil>0x0是否相同?

  1. v是泛型值谓词,它将零指针打印为<nil>,因为这作为泛型格式最有意义。注意单词";默认";在其描述中:它使用p作为默认,而不是无条件的。

  2. p打印指针值,从而将零指针打印为0x0。注意,pv是不同的动词。

  3. 是的,零指针为0。但是要注意,字符串CCD_ 13和CCD_;相同";。

(提示:尝试巧妙地使用fmt.Printf来学习东西是非常困难的,因为它包含了很多(合理的(魔法。(

最新更新