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

时间:2011-01-20 07:53:22

标签: c++ c pointers printing format-specifiers

我正在处理一个项目,我一直遇到这个错误,不允许我完成项目。当我初始化我的一个指针指向将在程序执行期间生成的对象时,我将其初始化为NULL。然后,当我检查它的设置时,返回值nil。这样的事情怎么可能?我不相信C中存在零指针。有什么方法可以解决这个问题吗?

struct order_line *front = NULL;
...
printf("Head: %p\n", front);  // prints -> Head: (nil)

7 个答案:

答案 0 :(得分:10)

%p中的

printf格式化指针类型。这将区分空指针和打印(nil),因为它是指针上下文中的特殊值。如果要为空指针输出0,请将指针强制转换为整数并改为使用%d

printf("Head: %d\n", (int) front);

原始答案,因为它可能仍然有用:

NULL是定义为0((void *) 0)的宏,因此,如果您设置指向NULL的指针,则与将其设置为0的指针完全相同。这适用于声明空指针的目的,因为地址0的内存永远不会分配给您的程序。

答案 1 :(得分:3)

当您使用printf("%p", somePtr)打印指针时,它会以实现定义的方式打印,根据POSIX printf specification的引用(C99中存在类似的措辞)规范也)。

  

参数必须是指向void的指针。指针的值将以与实现相关的方式转换为可打印字符序列。

我想,这意味着如果指针是NULL,它可能会打印出它想要的内容,包括将其打印为nil0x000000000。< / p>

答案 2 :(得分:1)

使用

printf("Head: %s, %d, %p\n", front, front, front);

打印Head: (null), 0, (nil)

由于 Packia

答案 3 :(得分:0)

我假设你的调试器告诉你的是nil。在大多数编译器中,null只是#define ed为0,因此名称并不重要。

答案 4 :(得分:0)

正如其他人所说,C中没有nil指针这样的东西。

可能是您的内存分配失败,导致0被分配给指针。

答案 5 :(得分:0)

如果您的问题是将指针值与NULL进行比较,则printf()打印的值无关紧要。您仍然可以 if(ptr == NULL)

    ptr =(nil)和NULL =(nil)=&gt; ptr = NULL:)

你得到的错误必须是因为其他原因。

答案 6 :(得分: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 Free\n");
doFree((void **)&ps->p);
}

输出: -

变量的地址是--- ps-&gt; p ---删除后 - 无 变量的地址是--- ps-&gt; p ---删除后 - 0

对于if条件,它将评估为false。