zoukankan      html  css  js  c++  java
  • 温故而知新_C语言_前缀++(--)和后缀++(--)

    前缀++(--)和后缀++(++)是有区别的。

    再单独使用的时候是没有区别的,都是自身递增或者递减1.

    但是综合使用起来会一样吗?

    下面的例子都是++,替换成--也是一样,道理都是一样的。

    请先看下面例子:

    #include<stdio.h>
    int main(void)
    {
       int a=0,b=0;
       a++; //后缀++
       ++b; //前缀++
       printf("a++ is %d
    ",a );
       printf(" ++b is %d",b );
       
    }

    出来的结果都是1.

    既然结果都一样,那说个P啊!

    呵呵

    是吗,那么看下面的例子。

    #include<stdio.h>
    int main(void)
    {
         int a=0;
         int b=0;
      
       int c=++a*5;
       int f= 5*b++;
       printf("c=%d a=%d
    ", c,a);
       printf("f=%d b=%d",f,b);
    }

    如果按照上面的说法,他们的值都应该是是5。

    但是结果?

    什么结果?

     a =1,b=1

     c=5    f=0

     是不是奇怪在f为什么是0?

    还是要考虑他们的(前缀++和后缀++)的运算方式:

    假设

     int i=0 ;int A;

     A=i++*5

    A=0

    *********************************************************

    int i=0 ;int B;

    B=++I*5;

    B=5

     

    第一种是 I与5相乘并将值赋予A,之后I在递增1

    第二种是 I递增1在于5相乘并将值赋值与B

     ***************************************************************

    也就是前缀(++)(--)会先递增/递减并在执行表达式

    而后缀呢? 是先让执行表达式并赋值后,在执行递增/递减(也就是后缀的影响到其本身5*i++,只影响到I,并且还是在表达式全部完成后)

    值得一说的是,递增/递减只会影响到一个可以修改的左值。在括号的作用下也是白扯。

    x*y++等于(x)*(y++)=x*y,然后再y++

    而不是等于(x*y)++,因为x+y并不是一个可以修改的值

    他们之间的优先级也是不一样的。前缀的(++)(--)优先级要比后缀的(++)(--)优先级要高。

    在使用递增/递减的时候要考虑前缀和后缀的区别。

                               

                    

  • 相关阅读:
    汉字机内码的特点
    while(~scanf(..))的用法
    【C语言】八进制转十进制
    【C语言】按字典顺序排序
    【C语言】矩阵相乘
    【C语言】魔方阵
    【C语言】统计候选人的得票数
    【C语言】对输入的字符串中C关键词的查找统计
    20201231《信息安全导论》第十二周学习总结
    20201231《信息安全导论》第十一周学习总结
  • 原文地址:https://www.cnblogs.com/T-ARF/p/7543579.html
Copyright © 2011-2022 走看看