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