1.int i = 0;
int j = 0;
if( (++i>0)||(++j>0) )
{
printf("i = %d j = %d \n",i,j);
}
输出多少呢?
i = 1 j = 0 ,由于 或|| 运算符的左面为真则不再判断右面是否为真,其结果即为真;如果||左面为假则还要继续判断右面,来决定最终结果。
对于 与&& 运算符,左面为假则不再判断右面,结果即为假,左面为真还要继续判断右面。
2..int i = 0;
int j = 0;
j = (i++,i++,i++);
printf("i = %d j = %d \n",i,j);
输出多少呢?
i = 3 j = 2 ,++作为后缀时先不改变i的值,运算结束后再进行加一;“i++,”为一个计算单位,运算结束后i值为1,最后个i++后没有逗号不算做一个计算单位,因此j的值为2,此时i的值也为2,但是j = (i++,i++,i++);执行结束后,还有一个分号结尾的计算单位,所以i还要加一,最终i = 3.(逗号","算作一个计算单位)
3.int i = 0;
int j = 0;
j = (i++) + (i++) + (i++);
printf("i = %d j = %d \n",i,j);
输出结果如何?
i = 3 j = 0 ,j = (i++) + (i++) + (i++);中只有一个计算单位,所以i 的值先不变,最后执行3次加一操作。(分号";"算作一个计算单位)
4.int i = 0;
int j = 0;
j = (++i)+ (i++) + (i++);
printf("i = %d j = %d \n",i,j);
输出结果如何?
i = 3 j = 3 ,执行(++i)后i值为1,之后的i值不变,所以j为3,j = (++i)+ (i++) + (i++);语句结束后一个计算单位结束,执行2次i加一。
5.int i = 0;
int j = 0;
j = (i++) +(++i) +(i++);
printf("i = %d j = %d \n",i,j);
输出结果是 i = 3 j = 2 ?
实际上i = 3 j = 3 ,由于 + 双目运算符 (左右两面相加) ,所以(i++)的结果为0,(++i)的结果为1,那么i = 0和i = 1 就矛盾了,系统会取加号右面的i = 1,j = 1+1+1;结果为3.(这种单个变量连续加的问题很少遇到)
6.上面介绍了两类计算单位,实际上还有一种:for(;;)
for(表达式1;表达式2;表达式3)
{
语句
}
a.执行表达式1
b.执行表达式2,如果为真则执行语句,否则跳出循环
c.执行表达式3 然后跳转到b
这里的 执行表达式3 就相当于一个计算单位,因此表达式3中常用的i++ 与 ++i 效果是一样的。
以上内容如有错误欢迎指正。