if(p==NULL)和if(!*p)作用相同还是相反?

C语言 码拜 9年前 (2015-07-01) 1708次浏览 0个评论

char *p;那么if(p==NULL)和if(!*p)作用相同还是相反?我觉得是相反的,但好像是相同的,求解释?

4分
不同的东西
p==NULL   判断指针是不是空指针
!*p   是对p指针指向的char  进行取反操作
if(p==NULL)   和 if(!p)   效果相同,但与指针判空 建议使用前者
1分
前面写错了  if(p==NULL)   和 if(!p)   效果相反

早期的指针 空指针NULL的值是0
if(p==NULL)    相当于 if(p==0)
if(!p)  相当于 if(!(p!=0))

8分
根本就没有可比性:

char * p = NULL;
if (p == NULL) // true
if (!*p) // crash

char a = “”\0″”;
char * p = &a;
if (p == NULL) // false
if (!*p) // true

char a = “”A””;
char * p = &a;
if (p == NULL) // false
if (!*p) // false

当然,如果LZ问的是
if (p == NULL)

if (!p)
的话,两个条件是等价的,简单的判断方法就是使用真值表。

5分
if(p==NULL) ==> if(p==0)
if(!*p) ==> if(*p==0)
2分
引用 2 楼 king191923157 的回复:

前面写错了  if(p==NULL)   和 if(!p)   效果相反

早期的指针 空指针NULL的值是0
if(p==NULL)    相当于 if(p==0)
if(!p)  相当于 if(!(p!=0))

就一个意思,通常我爱写成if(!p)
NULL 的宏就是0, 另外新版编译器都支持推荐用nullptr
另外“ if(!p)  相当于 if(!(p!=0)” 这什么意思,不懂,if(!p) 就是p为零(即!p不为零)时候执行


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明if(p==NULL)和if(!*p)作用相同还是相反?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!