我混淆了指针的%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
是否相同?
-
v
是泛型值谓词,它将零指针打印为<nil>
,因为这作为泛型格式最有意义。注意单词";默认";在其描述中:它使用p
作为默认,而不是无条件的。 -
p
打印指针值,从而将零指针打印为0x0
。注意,p
和v
是不同的动词。 -
是的,零指针为0。但是要注意,字符串CCD_ 13和CCD_;相同";。
(提示:尝试巧妙地使用fmt.Printf
来学习东西是非常困难的,因为它包含了很多(合理的(魔法。(