(nil)C/C ++中的指针
-
13-10-2019 - |
题
我正在研究一个项目,并且我不断遇到这个错误,这将不允许我完成该项目。当我初始化一个指针以指向程序执行过程中将制作的对象时,我将其初始化为 NULL
. 。然后,当我检查以查看设置的内容时,它返回的值 nil
. 。怎么可能?我不相信C中存在零指针。
struct order_line *front = NULL;
...
printf("Head: %p\n", front); // prints -> Head: (nil)
解决方案
%p
在 printf
格式化指针类型。这将区分无零件并打印 (nil)
因为它在指针的上下文中是一个特殊的价值。如果要输出零指针0,请将指针施放为整数并使用 %d
反而:
printf("Head: %d\n", (int) front);
原始答案可能仍然有用:
NULL
是一个宏定义为 0
或者 ((void *) 0)
, ,因此,如果您设置了一个指针 NULL
与设置完全相同 0
. 。这适用于宣布无效指针的目的,因为地址0的内存永远不会分配给您的程序。
其他提示
当您打印指针时 printf("%p", somePtr)
, ,它印在 实施定义的方式, ,根据此报价 POSIX PRINTF规范 (在C99规范中也存在类似的措辞)。
该论点必须是通往空白的指针。指针的价值以实现依赖性方式转换为一系列可打印字符。
我想,这意味着指针是 NULL
, ,它可能需要打印它,包括将其打印为 nil
或者 0x00000000
或者 0
.
利用
printf("Head: %s, %d, %p\n", front, front, front);
打印 Head: (null), 0, (nil)
谢谢Packia
我假设NIL是您的调试器告诉您的。在大多数编译器中,null只是#Define ed y yany无论如何,因此名称并不那么重要。
正如其他人所说的那样,没有任何零指针的东西。
可能是您的内存分配失败,导致 0
被分配给指针。
如果您的问题是关于将指针值与NULL进行比较,则printf()打印的值无关紧要。你仍然可以做 if(ptr == null) 为了那个原因。
- ptr =(nil)和null =(nil)=> ptr = null :)
由于某些其他原因,您必须遇到的错误。
用INT施放结构指针后,它提供了预期条件。
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 Free\n");
doFree((void **)&ps->p);
}
输出 :-
变量的地址为--- ps-> p ---删除后 - nil变量的地址为--- ps-> p ---删除后 - 0
它将评估为假条件。