问号字符('?')的含义是什么?

14

C语言中的问号 (?) 代表什么意思?


3
你能否给我们一个语境示例,说明你在哪里看到了“?”符号? - Rich Turner
@chris 它也是(在非常老的代码中)三字符组的一部分(如Benoit先回答了)。 - Rup
@bitcrazed:我听说过这些,但从未在实际代码中见过。甚至在非常古老的代码中也没有看到过 ;) - chris
1
@chris 你更有可能无意中输入一个错误的字符,并且得到编译器关于它们的警告,而不是找到真正的例子。 - Rup
问题太宽泛了,需要一些上下文和代码示例才能回答。? 可以是文本中的问号,也可以是 \? 转义序列的一部分,也可以是条件运算符 ?: 的一部分(此时 : 是必需的),或者是三字符组的一部分。所有猜测它是条件运算符的答案都只是猜测。OP没有回答 Rich Turner 在2011年提出的非常合理的澄清请求,所以我认为这个问题无法挽救。 - Lundin
显示剩余2条评论
8个回答

27

??:条件运算符的第一个符号。

a = (b==0) ? 1 : 0;
如果b等于0,a的值为1,否则为0。

13

它也可以是字符串或一般字符的一部分,而不是三连符:char c = '?'; char const * s = "?" - Thomas Eding

11

这是一个三元运算符,它是一种类似于if-else的条件运算符。

示例

int i=1;
int j=2;
int k;
k= i > j ? i : j;
//which is same as
if(i>j)
  k=i;
else
  k=j;

用法: ?: 的语法是

assignment_Variable = Condition ? value_if_true : value_if_false;

4

那可能是三元运算符的一部分:

const int numApples = …;
printf("I have %i apple%s.\n", numApples == 1 ? "" : "s");

只是为了避免将来任何混淆。这就是“条件运算符”。它碰巧是一个三元运算符,在 C 和 C++ 中仅有一个。在 C/C++ 中还有许多一元(~、!、-)和二元(+、-、<<)运算符。太棒了! - Thomas Eding

3

2


1

很可能'?'是三元运算符。它的语法如下:

RESULT = (COND) ? (STATEMEN IF TRUE) : (STATEMENT IF FALSE)

这是一种典型的if-else语句的简便写法:
if (COND) {
    RESULT = (STATEMENT IF TRUE);
} else {
    RESULT = (STATEMENT IF FALSE);

作为一行通常可以适应并且可以提高可读性。
这里的一些答案涉及到三字符组(trigraph),这与C预处理器有关。看一下这个非常愚蠢的程序trigraphs.c
# /* preprocessor will remove single hash symbols and this comment */
int main()
{
    char *t = "??=";
    char *p = "??/"";
    char *s = "??'";
    ??(, ??), ??! ??<, ??>, ??-
    return 0;
}

通过运行gcc -E -trigraphs trigraph.c只调用C预处理器,输出结果如下:

int main()
{
 char *t = "#"
 char *p = "\"";
 char *s = "^";
 [, ], | {, }, ~
 return 0;
}

希望这能稍微澄清一下什么是三字符组(trigraphs),以及在C语言中'?'的含义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接