5. 若有声明:

int a = 5, b = 2, c = 3;

则执行下面语句后,a、b、c的值各是多少?

c = 8 ? a++ : b−−;

[解析]

8 ? a++ : b−− 是一个条件表达式,也叫?:表达式,一般形式是:

表达式1 ? 表达式2 : 表达式3

计值过程如下:先计算表达式1的值,如果其值非0(真),那么计算表达式2的值,且该值就是整个条件表达式的值;否则计算表达式3的值,并取该值为整个条件表达式的值。表达式2和表达式3二者之中只有一个被求值。

语句 c = 8 ? a++ : b−−; 是一条赋值语句,将条件表达式 8 ? a++ : b−− 的值赋于变量c。为此,就要计算条件表达式 8 ? a++ : b−− 的值,按上述计值过程,先计算表达式1,也就是8的值,这是最简单的表达式,即常量8,因8非0,故计算a++的值,由于是后缀++,所以a++的值为5,这个5充当整个条件表达式8 ? a++ : b−−的值,而后令a加1变成6,且不计算表达式b−−的值,故b的值不变仍保持原值2,最后将条件表达式8 ? a++ : b−−的值5赋于c,因此a、b、c的值分别是6、2、5。

要注意表达式和语句的概念不同,在表达式后面添加分号,就变成了表达式语句。例如:

c = 8 ? a++ : b−−;  这是赋值语句,

而 c = 8 ? a++ : b−− 叫做赋值表达式。

a++  这叫增1表达式,

而 a++; 叫做增1表达式语句。

[练习题] 

试用下面程序验证上述结论:

fq-005-01fq-005-02

返回