c语言指针表达式问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 11:22:47
程序段
int *p;
int b;
if(!p)
{printf("aaa");}
......
请问"!p"是什么意思

if下面的语句是否执行,要看if(),括号中的值为真为假(即0或1 )。
!p即p值为假的时候执行下面的语句,对于指针行变量,即指为NULL是为假。
你可以int*p=NULL试试看,这个时候就会输出aaa

指针为空

!P 非p 就是说如果p==0 则!p不为0 就执行下面的语句

if(!p) 表示指针为空,等价于if(p==NULL)
不过这是一种不正规的写法,还是建议这样写:if(p==NULL) or if(p!=NULL)

等价于p==NULL
但比p==NULL优,是利用布尔运算优化代码

1.!是否定的意思,当指针的p的值为非零的时候,就是说当p的值非空的时候,那么!p就是0那么if下面的语句就会被跳过,如果p是一个空指针的时候,!p就是一个非零值,那么if下面的语句就会被执行,当然,你可以用任意一个有返回值的式子,或者是变量来代替p,分析方法是一样的。
2.这种方法有人会用,貌似会是程序显得稍微简洁一点,但是最好不要用,因为这样会使程序的可读性下降,如果简化一点代码会带来可读性和维护性的下降的话,除非是逼不得已,要不就一定不要用那种难懂的形式。