我故意试图在C中获取NULL指针,但我没有这样做。以下是我编码的内容:
int main(void) {
int x; //UNINITIALIZED so that it will represent "nothing"
int *null_test = &x;
printf("This should be null %p \n", null_test);
}
但它给了我一个地址:0x7fd96c300020
似乎不像我希望的那样NULL
。
为什么?我甚至没有初始化x
但仍然不是null?
答案 0 :(得分:9)
在
int *null_test = &x;
null_test
包含x
的地址。即使x
从未初始化,此地址也与x
的内容无关。
答案 1 :(得分:5)
为什么呢?我甚至没有初始化x但仍然不是null?
您需要区分1)定义和2)初始化。在为内存分配内存时定义变量。当该内存位置填入某个值时,将初始化变量。
此处x
未初始化但已已定义 - 这意味着已分配 - 这意味着x
在内存中具有特定位置。因此&x
不是NULL,因此null_test
:
int *null_test = &x;
如果您希望null_test
为NULL,请明确指定
int *null_test = NULL;