Tag: 空指针

你什么时候能够返回NULL作为C函数的返回值?

我想知道你是否可以告诉我你什么时候能够返回NULL ,这是C中函数的结果。 例如, int lenght()不能返回NULL因为在return语句中需要一个int 。 但是函数struct node* find(int key) ,当使用链表时允许我返回NULL。

(int *)0是否为空指针?

这可以被认为是这个问题的扩展(我只对C感兴趣,但是添加C ++来完成扩展) 6.3.2.3.3中的C11标准说: 值为0的整型常量表达式或类型为void *的表达式称为空指针常量。 我个人对此的看法是0和(void *)0表示空指针,其整数值实际上可能不是0,但不包括0强制转换为任何其他类型。 但是,标准然后继续: 如果将空指针常量转换为指针类型,则生成的指针称为空指针 ,… 它覆盖(int *)0作为空指针,因为强制转换是转换方法下列出的显式转换 (C11,6.3)。 然而,令我惊讶的是以下这句话 …或者这样的表达式转换为void * … 有了上述语义,这句话​​似乎完全没用。 问题是,这句话完全没用吗? 如果没有,它有什么影响? 因此, (int *)0为空指针? 可以帮助讨论的另一个问题如下。 是(long long)123被认为是“123转换为long long ”,或“123 long long型long long ”。 换句话说, (long long)123是否有任何转换? 如果没有,那么上面的第二个引号不会覆盖(int *)0作为空指针。