条件表达式中的匹配

删除空格的小程序内容如下。

#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;

所以后面类型不同会报警告,我的一孔之见。

原文地址:https://www.cnblogs.com/liujiahi/p/2196394.html