Каково поведение спецификатора преобразования `p` с указателем` NULL`?

Интересно, делает ли это:

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

Всегда будет выдавать вывод (nil)?

Это зависит от стандартной реализации библиотеки или стандартной спецификации C99?

Ответ 1

В моей системе это дает (null), поэтому я предполагаю, что она определена. В более общем плане все %p -печатки определяются реализацией:

7.21.6.1

Аргумент должен быть указателем на void. Значение указателя преобразуется в последовательность печатных символов, в определенным образом.

Ответ 2

Всегда будет указывать (nil)?

Совсем нет. На моей машине (Mac с i686-apple-darwin11-llvm-gcc-4.2) он печатает 0x0.