自增自减运算符的学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LY_CHOU/article/details/52275703

优先级别:++、--、-、------>乘/除法------->+/-

作用是使变量的值增1或减1.

++i,--i     在使用i之前,先使i的值加(减1)

i++,i--     在使用i之后,使i的值加(减1)

注意:1.自增运算符只能用于变量,而不能用于常量或表达式。

            2.自右向左进行编译,值的结果自右向左输出。

简单举例:

1.main()                                               2.main()                                       3.main()                                           4.main()

{                                                              {                                                     {                                                          {

int a=3;                                                 int a=3;                                           int a=3;                                            int a=3;

printf("%d,%d",a,++a);                       printf("%d,%d",++a,a);                 printf("%d,%d",a,a++);                  printf("%d,%d",a++,a);

扫描二维码关注公众号,回复: 2954562 查看本文章

}                                                               }                                                     }                                                         }

输出结果:4,4                                    输出结果:4,3                             输出结果:4,3                                  输出结果:3,3

动手练习下喽:

1.main()                                                            2.main()

{                                                                           {

int  a=3;                                                              int  a=3;

printf("%d,%d,%d",a,a++,++a);                      printf("%d,%d,%d",a++,++a,a);

}                                                                             }

输出结果:5,4,5                                          输出结果:4,5,5

5(6)4(5)a(4)                                                     

这两个结果让我有点纠结。5555

1.main()                                                           2.main()

{ int  a=3;                                                              {      int   a=3,b;

printf("%d",(a++)+(a++)+(a++));                              b=(a++)+(a++)+(a++);

}                                                                                printf'("%d",b);

                                                                            }

输出结果:12(5+4+3)                                      输出结果:9(3+3+3)

第一个例子,a的值并没有赋予任何一个变量,所以对于它自身所做的自增自减运算来说,它的值是不断变化的。

第二个例子,a的值被赋予了b,这就要求a必须是一个固定的值,也就意味着a的值是静止的。

又来一波练习!

1.main()                                                           2.main                                                         3.main()

{ int   a=3;                                                           {int   a=3,b;                                                 {   int   a=3,b;

  printf("%d",(++a)+(++a)+(++a));                     b=(++a)+(++a)+(++a);                                b=(++a)+(++a)+(a++)

}                                                                              printf("%d",b);                                               printf("%d",b); 

输出结果:16(5+5+6)                                       }输出结果:16(5+5+6)                             }输出结果:15(5+5+5)         

总结:前两个先进行运算,再与最后一个进行运算                                       

最令人吐血的!            

1.main()                                                            2.main()

{ int  a=3;                                                              { int  a=3;

a=(a++)+(++a)+(a++);                                         printf("%d",(a++)+(++a)+(a++));

printf("%d",a);                                                      }

}输出结果:14()                                      输出结果:13(5+5+3)

1.赋值对象是它本身,自右向左,两次a++,a=5

2.自右向左依次运算

意外滴!

1.int i=3;                                                             2.int i=3; 

int j=4;                                                                    int j=4;

int a=i++ + i++;                                                     int a=i++ + i++ + i++;

int b=++j + ++j;                                                     int b=++j + ++j + ++j;

printf("%d,%d\n",a,b);                                         printf("%d,%d\n",a,b);

输出结果:6,12                                                    输出结果:9,19(6+6+7)

1111i++是执行完整个表达式的其他操作后,然后自增,a=3+3=6,而后,i自增两次,i=5

1111++i是先自增然后再参与其他运算,b=6+6=12

2222因为存在两个同级的+运算,根据+运算符的左结合性,在编译时,首先处理(++j + ++j)这部分,再将此结果和++j相加。

总结:计算结果被赋予一个新变量,前两个先结合。未被赋予新的变量,自右向左逐步计算。

我又晕啦!!!啊啊啊啊!!!

int  i=2;

printf("%d %d %d %d %d\n",i++,i++,++i,++i,i++);

输出结果:6 5 7 7 2

从最右边开始:2(3)--i(4)--i(5)--5(6)--6(7)

i=2;

printf("%d %d %d %d %d\n",i++,++i,i++,i++,++i);

输出结果:6 7 4 3 7

从最右边开始:i(3)--3(4)--4(5)--i(6)--6(7)

通过例子,我们可以发现,有几个++i,就有几个值相等,而且它们的值最大。i++被替换成数值,++i被替换成变量名。

使用printf函数打印自增自减运算时,发现函数的传参是自右向左的。


猜你喜欢

转载自blog.csdn.net/LY_CHOU/article/details/52275703