使用`NULL`指针转换说明符`p`的行为是什么?

我想知道是否:

void *ptr = NULL; printf("%p\n", ptr); 

总是给出(nil)输出?

它是依赖于标准库实现,还是C99标准规范?

在我的系统上它产生(null)所以我猜它是实现定义的。 更一般地说,所有%p print都是实现定义的:

7.21.6.1

参数应该是指向void的指针。 指针的值以实现定义的方式转换为打印字符序列。

总是给(零)?

一点也不。 在我的机器上(Mac与i686-apple-darwin11-llvm-gcc-4.2 ),它打印0x0