旅游公司网站难做吗,wordpress收件邮箱,dw建设的网站上传,三丰云做游戏网站熟悉C语言的童靴对三目运算符都非常熟悉#xff0c;a? b : c; 如果a为true#xff0c;则整个运算符的值为b,否则为c;那么问题来了#xff0c;三目运算符中间的表达式可以省略吗?即a? : c;
1、linux内核中出现的省略情况
本人在阅读内核代码是发现了下面的代码: preferr…熟悉C语言的童靴对三目运算符都非常熟悉a? b : c; 如果a为true则整个运算符的值为b,否则为c;那么问题来了三目运算符中间的表达式可以省略吗?即a? : c;
1、linux内核中出现的省略情况
本人在阅读内核代码是发现了下面的代码: preferred_zoneref first_zones_zonelist(ac.zonelist, ac.high_zoneidx, ac.nodemask ? : cpuset_current_mems_allowed,ac.preferred_zone);
其中标红部分是一个三目运算符,而且还是一个省略的三目运算符。那么问题来了a? : c如果a为true的情况下,整个三目运算符的值到底是什么? 2、动手测试下
#include stdio.h #include stdlib.h
int bar(char *a,char*b) { if(a ! NULL) printf(%s \r\n,a); else printf(a is NULL \r\n); if(b ! NULL) printf(%s \r\n,b); else printf(b is NULL \r\n); return 0; }
int main(int argc,char *argv[]) { char *a hello; char *b world; char *c how are you?; bar(a,b); printf(%s \r\n,c?no NULL:NULL); bar(a,c? : i am fine); return 0; }
输出结果如下:
hello world no NULL hello how are you?
c? : i am fine 的运算结果是how are you?,即变量c初始化的值。
所以可知三目运算符(a?b:c)出现省略的情况下(a?:c)省略值就是第一个运算符a的值。
如果将c省略,即a?b: ;测试发现编译会报错。