【发布时间】:2016-10-28 05:08:51
【问题描述】:
如果我这样做:
int *ptr = NULL:
printf("%p", ptr);
我得到 (nil) 打印出来。所以这是打印出指针的地址?其中指向一个空指针地址。
但如果我这样做:
int *ptr = NULL;
printf("%p", &ptr);
我得到一个内存地址。为什么是这样?是因为它给出了实际的 NULL 内存位置吗?这个位置总是改变吗?每当我使用第二段代码时,我都会不断获得不同的内存地址。
【问题讨论】:
-
int ptr = NULL不是指针。它是一个整数。 -
@RishikeshRaje 对不起!忘了*。谢谢!
-
当使用
%p打印空指针时,printf()的哪个变体给出(nil)? -
@JonathanLeffler 你是什么意思哪个变种?
-
谢谢。那很有意思。不习惯
(nil);它不是大多数地方印刷的。例如,在 Mac 上,您会得到 0x0(即使您使用%12p,尽管它在 12 个空格中是右对齐的)。还有一些平台在你使用"%s"并给它一个空指针来工作时不会崩溃……它们很容易打印出(null)或类似的东西。