条件表达式中的匹配
删除空格的小程序内容如下。
#include <stdio.h>
void blankdel (char *str);
int main (void)
{
char str[20] = " ab cd ef ";
puts (str);
blankdel (str);
puts (str);
return 0;
}
void blankdel (char *str)
{
char *p = str;
char *q = str;
while (*p)
(*p != ' ') ? (*q++ = *p++) : (p++);
*q = '\0';
}
关键的就是这一句 (*p != ' ') ? (*q++ = *p++) : (p++);
程序逻辑和运行时没有问题的,但是编译是会报一个警告:
pointer/integer type mismatch in conditional expression
有警告总是看着不爽,于是采用了个笨办法,改成了
(*p != ' ') ? (*q++ = *p++) : (*p++);
就没有警告了。
由此可以看出程序设计者设计问号表达式的初衷,它主要是用来赋值的!
比如 a = xxx? m : n;
所以后面类型不同会报警告,我的一孔之见。