指针上的逻辑非运算符

时间:2014-12-22 09:28:55

标签: c pointers

代码:

struct person *p = NULL;
printf("%d, %d\n", !p, !!p);

在上面的代码中,!运算符适用于指针,我知道!适用于int,但是当它与pointer一起使用时会发生什么?

指针本质上被视为int,还是!进行了类型转换?


我在这里找到了答案中提到的c99参考: www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf

2 个答案:

答案 0 :(得分:4)

c99标准,第6.5.3.3章,第1段

  

一元+或 - 运算符的操作数应具有算术类型; 〜运算符,   整数类型;的!运算符,标量类型。

,并且,从6.2.5,第21段,

  

算术类型和指针类型统称为标量类型。

因此,可以直接将pointer类型与一元!运算符一起使用。 !正常评估。

也许值得一提的是,如果使用pointerNULL值为 False NULL以外的任何值都被视为

答案 1 :(得分:0)

无论如何,指针只是某个地址,即数字。所以'!'操作员也会像往常一样玩指针。