代码:
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
答案 0 :(得分:4)
从c99
标准,第6.5.3.3章,第1段
一元+或 - 运算符的操作数应具有算术类型; 〜运算符, 整数类型;的!运算符,标量类型。
,并且,从6.2.5,第21段,
算术类型和指针类型统称为标量类型。
因此,可以直接将pointer
类型与一元!
运算符一起使用。 !
正常评估。
也许值得一提的是,如果使用pointer
,NULL
值为 False 除NULL
以外的任何值都被视为真
答案 1 :(得分:0)
无论如何,指针只是某个地址,即数字。所以'!'操作员也会像往常一样玩指针。