c语言 - 打印指针值 NULL



为什么我不能打印值为 NULL 的指针? 这是我的代码:

#include <stdio.h>
int main(void)
{
int * p = 0;
printf("%p %p ", p, *p);
getchar();
return 0;
}

错误为:"引发异常:读取访问冲突。 P是空的。 我想了解错误...

pNULL,这是一个无效的指针值 - 该地址没有对象。printf调用中*p的表达式尝试取消引用该无效指针,并且执行此操作的行为是未定义的。 在这种特殊情况下,它会导致代码崩溃。

请记住,声明

int * p = 0;

创建一个类型为"指向int的指针"的对象(*仅用于指示类型),并将该指针对象的值初始化为0(NULL)。根据定义p不指向任何对象或函数,因此表达式*p没有意义。

更不用说,表达式*p的类型是int,所以你会使用%d来打印它,而不是%p

注意 - 有一个空指针常量和一个空指针。 指针上下文中的零值常量表达式(如0(void*) 0)是空指针常量(NULL宏)。 在转换过程中,该空指针常量将转换为空指针值,该可能0也可能不。 null 指针值只是一些定义良好的地址值,保证与任何对象或函数的地址不相等。

指针指向变量。试试这个:

#include <stdio.h>
int main(void)
{
int a = 0;
int * p = &a;
printf("%p %p ", p, *p);
getchar();
return 0;
}

相关内容

  • 没有找到相关文章

最新更新