1、关于if else的匹配问题:
A: if()
语句1;
else if()
语句2;
else
语句3;
像这样的多分枝结构只能执行一个语句!
B: if()
语句1;
if()
语句2;
else()
语句3;
vs默认两个if是并列结构,else与离得最近且未匹配的if匹配,如要表示else与第一个if1匹配需要写大括号,如下:
if()
{
语句1;
if()
语句2;
}
else
语句3;
2、||与&&的问题:
int i=1,j=1,k=2;
if((j++||k++)&&i++)
这里||前面的满足为真,则不执行后面的k++,如果&&前面的为假则不执行后面的i++
3、关于前置++与后置++在不同位置的作用:
始终记住i++是先赋值再自增,++i是先自增再赋值!!!
下面看几个例子:
A:
int i=1,j=1,k=2;
if((j++||k++)&&i++)
printf("%d,%d,%d\n",i,j,k);
由于j为真,j自增1(为假也要自增1)且不用处理k,i为真,i自增1(为假也要自增1),所以打印结果为 2,2,2
B:
int x;
scanf("%d",&x);//x=5
if(x--<5)
printf("%d",x);
else
printf("%d",x++);
x先与5比较,为假,执行else,且自减1,打印%d之后再x++(自增),所以结果还是4
4、算术操作符
int x;
scanf("%d",&x);//x=5
if(x--<5)
printf("%d",x);
else
printf("%d",x+12);
x先与5比较,为假,执行else,且自减1,%d=x+12,但是x本身没有赋值
以上内容均为个人总结整理,如有错误,敬请指正。