在C中没有获取空指针错误

在C中没有获取空指针错误,c,pointers,C,Pointers,我有意在C中获取空指针,但没有成功。以下是我编写的代码: 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,它似乎不像我希望的那样是空的 为什么??我甚至没有初始化,但仍然不是空的

我有意在C中获取空指针,但没有成功。以下是我编写的代码:

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,它似乎不像我希望的那样是空的

为什么??我甚至没有初始化,但仍然不是空的

为什么??我甚至没有初始化,但仍然不是空的

您需要区分1定义和2初始化。一个变量是在内存分配给它时定义的。当用某个值填充该内存位置时,将初始化变量

这里x是未初始化的,但已经定义了-这意味着被分配-这意味着x在内存中有一个特定的位置。so&x不为空,so NULL\u测试:

int*null_测试=&x

如果希望null\u测试为null,只需显式地分配它

int*null_test=null

为什么??我甚至没有初始化,但仍然不是空的

您需要区分1定义和2初始化。一个变量是在内存分配给它时定义的。当用某个值填充该内存位置时,将初始化变量

这里x是未初始化的,但已经定义了-这意味着被分配-这意味着x在内存中有一个特定的位置。so&x不为空,so NULL\u测试:

int*null_测试=&x

如果希望null\u测试为null,只需显式地分配它

int*null_test=null

之后

int *null_test = &x;
null_测试包含x的地址。此地址独立于x的内容,即使x从未初始化。

之后

int *null_test = &x;

null_测试包含x的地址。此地址与x的内容无关,即使x从未初始化。

您没有将NULL分配给NULL\u test。您只需要int*NULL\u test=0;int x定义了一个int。根据定义,int不能为NULL。只有指针可以为空。@LudvigRydahl x不是指针。它怎么能指向任何地方?它有一个特定的位置,可能在堆栈上,当然可以包含垃圾。但是x的值不会在任何地方读取。既不直接,也不通过空_测试。是否在不读取地址的情况下获取地址?未定义的行为?有效变量的地址始终是有效指针,因此null\u test指向有效内存地址。您没有将null指定给null\u test。您只需要int*null\u test=0;int x定义了一个int。根据定义,int不能为NULL。只有指针可以为空。@LudvigRydahl x不是指针。它怎么能指向任何地方?它有一个特定的位置,可能在堆栈上,当然可以包含垃圾。但是x的值不会在任何地方读取。既不直接,也不通过空_测试。是否在不读取地址的情况下获取地址?未定义行为?有效变量的地址始终是有效指针,因此null_测试指向有效内存地址。默认情况下定义为0?否,未初始化的局部变量意味着它可以获取任何值-不保证为0。默认情况下定义为0?否,未初始化的局部变量意味着它可以获取任何值-不保证为零。