【问题标题】:What does the question mark character ('?') mean?问号字符('?')是什么意思?
【发布时间】:2011-02-03 10:43:44
【问题描述】:

C 中的问号 (?) 是什么意思?

【问题讨论】:

  • 您能否给我们一个上下文示例,说明您在哪里看到“?”?
  • @bitcrazed:只是好奇:除了三元运算符,你还想什么其他用途?
  • @chris 它也是trigraph 的一部分(在严重的旧代码中),因为 Benoit 击败了我来回答。
  • @bitcrazed:我读过这些,但从未在实际代码中见过它们。甚至在真正的旧代码中也没有;)
  • @chris 你更有可能不小心输入了一个并收到关于它们的编译器警告,而不是找到真实的例子,是的。

标签: c


【解决方案1】:

??: 三元运算符的第一个符号。

a = (b==0) ? 1 : 0;

如果b 等于0a 的值为 1,否则为 0。

【讨论】:

    【解决方案2】:

    除了其他答案,? 可以是 trigraph 的一部分。

    【讨论】:

    • 它通常也可以是字符串或字符的一部分,而不是三元组:char c = '?'; char const * s = "?".
    【解决方案3】:

    这是一个ternary Operator,它是条件运算符,如 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】:

      这可能是ternary operator的一部分:

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

      【讨论】:

      • 只是为了避免后代在这里出现任何混乱。它是“条件运算符”。它恰好是一个三元运算符,在 C 和 C++ 中只有一个。 C/C++ 中也有很多一元(~、!、-)和二元(+、-、
      【解决方案5】:

      这是一个所谓的条件运算符。您可以使用此运算符缩短 if else 语句。

      下面的链接应该能解释一切

      http://www.crasseux.com/books/ctutorial/The-question-mark-operator.html

      【讨论】:

        【解决方案6】:

        它是一个条件运算符。例如参考下面的链接 http://en.wikipedia.org/wiki/Conditional_operator

        【讨论】:

          【解决方案7】:
          【解决方案8】:

          很可能是“?”是三元运算符。它的语法是:

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

          这是典型 if-else 语句的一个很好的简写:

          if (COND) {
              RESULT = (STATEMENT IF TRUE);
          } else {
              RESULT = (STATEMENT IF FALSE);
          

          因为它通常可以放在一行中,并且可以提高可读性。

          这里的一些答案是指与 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;
          }
          

          希望这能澄清一下什么是三元组,以及什么是“?” C中的“意思”。

          【讨论】:

            猜你喜欢
            • 2010-10-22
            • 2012-04-19
            • 1970-01-01
            • 2011-04-07
            • 2014-05-11
            • 1970-01-01
            相关资源
            最近更新 更多