int b=3,c=3;
输出1 是输出 逗号表达式 (a++,b++,c++) 的值
逗号表达式 的 值 等于 最右 一个式子 c++ 的 当前 值,就是 c 的当前值(尚未自增)
逗号表达式 里的3个式子 用的是 后缀加,所以 a,b,c 用当前值,出了逗号表达式后再 各自 增加 1。
输出2 是输出 自增 1 后 的 b 值(已自增)
输出3 是输出 c 的当前值 -- 这同编译器编译优化处理有关,它可能仍用原值,也可能已增1。若未增1,则 出了打印语句后 会自增1。
(建议,不要使用这种 带 不确定 因素的 语句。)
--
例子, MS VC++ 5.0
#include
int main()
{
int a=1,b=3,c=3;
printf("%d, %d, %d",(a++,b++,c++),b,c);
return 0;
}
输出: 3, 4, 3
(不是 3,3,4)
按十进制输出(a++,b++,c++)、b、c三个表达式的值,中间用逗号隔开。
朋友你恍然大悟了?我看未必。请VC++6.0下的结果:
printf输出语句执行前, b = 3, c = 3;
执行printf语句时,(a++, b++, c++)逗号表达式执行,并且返回最后一个逗号后的c++的值作为整个逗号表达式的值,而c++返回值为3; 执行完该逗号表达式后,c的值变为4; 接着输出b;接着输出4。
因而输出的结果为3,3,4.
就是输出表达式的值啊,
输出为3,4,4