zoukankan      html  css  js  c++  java
  • i++和++i的区别及在for()循环语句中的应用细节

    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
        int i,j;
        for (i=1; i <= 10; i++)
            printf("%d ", i);
        printf("
      i=%d  
    ", i);
    
        for (j = 1; j <= 10; j++)
            printf("%d ", j);
        printf("
      j=%d  
    ", j);
        system("pause");
        return 0;
    }
    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
        int i,j,x=1,y=1;
        for (i = 1; i <= 10; i++)
        {
            printf("x=%d 
    ", x);
            x++;
        }
        printf("
      i=%d  
    
    ", i);
    
        for (j = 1; j <= 10; j++)
        {
            printf("y=%d 
    ", y);
            ++y;
        }
        printf("
      j=%d  
    ", j);
    
        system("pause");
        return 0;
    }
    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
        int a = 5, b;
        b = a++; //我们可以这样理解该语句执行细节:步骤1、b=a;  步骤2、a=a+1=6           
        printf("
      a = 5 ,b未赋值,若 b = a++,  则有:b = %d,a = %d  
    
    ", b, a);  //输出:b = 5,a = 6
    
        int c = 5, d;
        d = ++c;  //我们可以这样理解该语句执行细节:步骤1、c=c+1=6;  步骤2、d=c=6;
        printf("
      c = 5 ,d未赋值,若 d = ++c, 则有:c = %d , d = %d  
    
    ", c, d);  //输出:c = 6 , d = 6
    
        int e = 16, f;
        f = (e++) + ++e;  /*  我们可以这样理解该语句执行细节:
                            步骤1、执行++e,e=e+1=17(因为这个表达式里面,++e的优先级最高,要先算它);
                            步骤2、f=17+17=34(这时候e=17);   步骤3、e=e+1=18;   */
        printf("
      e = 16 , f未赋值,若 f = e++ + ++e,则有e = %d,f = %d  
    
    ", e, f);  //输出:e = 18,f = 34
    
        int j = 16, k;
        k = ++j + j++;  /*  我们可以这样理解该语句执行细节:步骤1、执行++j,j=j+1=16+1=17;
                        步骤2、k=17+17=34(这时候j=17),步骤3、j=j+1=17+1=18;    */
        printf("
      j = 16, k未赋值,若 k = ++j+ j++,则有j = %d ,k = %d  
    
    ", j, k);   /* 输出:j = 18 ,k = 34
                                                                                   codeblocks输出:j = 18,k = 35  */      
        int m = 20, n;
        n = 1 + (m++);   //我们可以这样理解该语句执行细节:步骤1、n=1+m=1+20=21;步骤2、m=m+1=20+1=21;
        printf("
      m = 20, n未赋值,若 n = 1 + m++,则有m = %d , n = %d  
    
    ", m, n);   //输出:m = 21 , n = 21
    
        int p = 50, q;
        q = 1 + ++p;   //我们可以这样理解该语句执行细节:步骤1、p=p+1=50+1=51;步骤2、q=q+1=51+1=52;
        printf("
      p = 50, q未赋值,若q = 1 + ++p,则有p = %d , q = %d  
    
    ", p, q);   //输出:p = 51 , q = 52
    
        system("pause");
        return 0;
    }/* 通过上述程序语句,我们可以这样理解:1、 含有++i的表达式,按照程序优先级(具体参见相关资料,一般先算i=i+1;
        2、含有i++的表达式,i=i+1的优先级排在最后(哪怕是(i++)这种形式),是表达式语句最后执行的一个步骤
          (在VS2017编译是这样,在codeblocks不是)
        3、引申到for( ;判定语句;i++)和( ;判定语句;++i)的情况,这两种形式效果是一样的。因为无论是i++,还是++i,
           它都是一个表达式,在这个表达式语句执行完之前,是不会执行判定语句的。也就是执行完i=i+1后(无论是i++,还是++i),
           再将i代入判定语句(在VS2017和codeblocks都同样结果)  */
  • 相关阅读:
    [文档].Actel – Actel HDL Coding Style Guide
    [原创].七段数码管驱动,Verilog版本
    [转载].“君让臣死 臣不得不死 不死也得死”的NIOS II 9.1 SP1中断问题
    [原创].菜农M0助学板PWM呼吸灯小练(寄存器操作方式)
    [笔记].菜农M0助学板之读SD卡块内容小练(库操作方式)
    [笔记].STM32 BOOT[0:1]启动设置
    [转载][奇文共赏].由入门到精通 吃透PID2.0.PDF
    [笔记].串型DAC TLC5620生成锯齿波、三角波实验,Verilog版本
    [笔记].怎样使用C语言读取文件中的数据,然后再写到文件中
    [原创].关于SD卡的隐藏分区的认识过程及结果
  • 原文地址:https://www.cnblogs.com/GoldCrop/p/10824676.html
Copyright © 2011-2022 走看看