自增、自减
++i,- -i(在使用i之前,先使i的值加(减)1)
i++,i–(在使用i之后,使i的值加(减)1)
++i是先执行i=i+1再使用i的值
i++是先使用i的值,再执行i=i+1
i=3;
printf("%d",++i);
输出的结果是4
printf("%",i++)
输出的结果是3
条件运算符和条件表达式
(a>b)?a:b
是一个条件表达式
?是条件运算符
如果为真,则条件表达式的值等于a,否则为b
条件运算符由两个符号(?和:)组成,必须一起使用。要求有三个操作对象,称为三目(元)运算符,它是C语言中唯一一个三目运算符。
条件表达式的一般形式为
表达式1?表达式2:表达式3
先求解表达式1,若为非0则求解表达式2,此时表达式2的值就是整个条件表达式的值
若表达式1的值为假,则求解表达式3,表达式3的值就是整个条件表达式的值。
max=(a>b)?a:b
的执行结果就是将条件表达式的值赋给Max,也就是将a和b二者中的大者赋给max
条件运算符优先于赋值运算符,因此赋值表达式的求解过程是先求解表达式,再将它的值赋给max
上面的例子是利用了条件表达式的值,把它赋给一个变量max,其实也可以不把条件表达式的值赋予一个变量,而在条件表达式中的表达式2和表达式3中对Max赋值,并在条件表达式后面加一个分号,就成为了一个独立的语句。
a>b?(max=a):(max=b);//表达式2和3都是赋值表达式
相当于
if(a>b) max=a;
else max=b;
条件表达式还可以写成
a>b?printf("%d",a): printf("%d”,b)
即表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式。
题目
int a=2,则a=a++>-1?++a:–a后,a=
表达式1:a++>-1
条件运算符优先于赋值运算符
表达式2:++a
表达式3:–a
最后赋值a
a++,++a都是将a变为a=a+1
所以表达式1a++之后就是a=3,>-1,成立
执行表达式2
此时就是a=++a
此时是,现将a先加1,之后再将a的值赋给a
所以此时a为4