有关C语言运算符的几个问题及解答

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 效果是一样的。

以上内容如有错误欢迎指正。

猜你喜欢

转载自blog.csdn.net/qq_41151162/article/details/82945962
今日推荐