Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言while循环中的复三元算子_C - Fatal编程技术网

c语言while循环中的复三元算子

c语言while循环中的复三元算子,c,C,前提:我知道代码写得很糟糕,这不是一个真实的例子,我永远不会那样写 有人能解释一下为什么它打印的是7而不是8吗?似乎最后一个a--是计算出来的,但是为什么呢?表达式为true…逗号运算符,的优先级低于三元运算符?: 打破你的表情: int a = 10; while (a > 8 ? (a--, (a > 7 ? a-- : a)): a--,a--) { printf("%d", a); // prints out 7 break;

前提:我知道代码写得很糟糕,这不是一个真实的例子,我永远不会那样写


有人能解释一下为什么它打印的是7而不是8吗?似乎最后一个
a--
是计算出来的,但是为什么呢?表达式为true…

逗号运算符
的优先级低于三元运算符
?:

打破你的表情:

  int a = 10;
  while (a > 8 ? (a--, (a > 7 ? a-- : a)): a--,a--) {
    printf("%d", a); // prints out 7
    break;
  }

Threfore
a
在计算表达式后变为
7

逗号运算符
的优先级低于三元运算符
?:

打破你的表情:

  int a = 10;
  while (a > 8 ? (a--, (a > 7 ? a-- : a)): a--,a--) {
    printf("%d", a); // prints out 7
    break;
  }

在计算表达式后,前
a
变为
7

第一步:
a>8
。检查
a>8
。这是真的

第二步:
a-,(a>7?a-:a)
。执行
a--
(a的值为9)。检查
a>7
。这是真的,所以
a--
(a的值是8)


第三步:
a--
。执行
a--
(昏迷后,最后一次操作)(a的值为7)

第一步:
a>8
。检查
a>8
。这是真的

第二步:
a-,(a>7?a-:a)
。执行
a--
(a的值为9)。检查
a>7
。这是真的,所以
a--
(a的值是8)


第三步:
a--
。执行
a--
(昏迷后,最后一次操作)(a的值为7)

重要的是要提到
?:
都是特例运算符<代码>?:在第一个和第二个或第三个操作数的求值之间有一个序列点,
在操作数从左到右的求值之间有一个序列点。如果没有这些,代码将被完全屏蔽,没有任何定义良好的结果。重要的是要提到
?:
都是特例操作符<代码>?:在第一个和第二个或第三个操作数的求值之间有一个序列点,
在操作数从左到右的求值之间有一个序列点。如果没有这些,代码将完全被窃听,没有任何定义良好的结果。