(零)C / C ++中的指针

我正在处理一个项目,我不断遇到这个错误,不允许我完成项目。当我初始化我的一个指针指向将在程序执行期间生成的对象时,我将其初始化为
NULL
。然后,当我检查它的设置时,返回值
nil
。这样的事情怎么可能?我不相信C中存在零指针。有什么方法可以解决这个问题吗?
struct order_line *front = NULL;
...
printf("Head: %pn", front);  // prints -> Head: (nil)
    
已邀请:
%p
in
printf
格式化指针类型。这将区分空指针和打印
(nil)
,因为它是指针上下文中的特殊值。如果要为空指针输出0,请将指针强制转换为整数并使用
%d
代替:
printf("Head: %dn", (int) front);
原始答案,因为它可能仍然有用:
NULL
是定义为
0
((void *) 0)
的宏,因此如果将指针设置为
NULL
,则与将其设置为
0
完全相同。这适用于声明空指针的目的,因为地址0处的内存永远不会分配给您的程序。     
当您使用
printf("%p", somePtr)
打印指针时,它将以实现定义的方式打印,根据POSIX printf规范中的引用(C99规范中也存在类似的措辞)。   参数必须是指向void的指针。指针的值以依赖于实现的方式转换为可打印字符序列。 我猜,这意味着如果指针是
NULL
,它可能会打印它想要的,包括将它打印为
nil
0x00000000
0
。     
使用
printf("Head: %s, %d, %pn", front, front, front);
打印
Head: (null), 0, (nil)
谢谢 Packia     
正如其他人所说,在C中没有nil指针这样的东西。 可能是您的内存分配失败,导致
0
被分配给指针。     
如果您的问题是将指针值与NULL进行比较,则printf()打印的值无关紧要。您仍然可以执行if(ptr == NULL)。 ptr =(nil)和NULL =(nil)=> ptr = NULL :) 你得到的错误必须是因为其他原因。     
我假设你的调试器告诉你的是nil。在大多数编译器中,null只是#define ed为0,因此名称并不重要。     
使用int转换结构指针后,它使用if语句提供了预期的条件。
printf("The address of the variable is---ps->p---After Deletion-- %p n",ps->p);
printf("The address of the variable is---ps->p---After Deletion--  %d n",(int)ps->p);
if((int)ps->p){
printf("Again in Freen");
doFree((void **)&ps->p);
}
输出: - 变量的地址是--- ps-> p ---删除后 - 无 变量的地址是--- ps-> p ---删除后 - 0 如果条件,它将评估为false。     

要回复问题请先登录注册