i++和++i的區別及在for()循環語句中的應用細節


 

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int i,j;
    for (i=1; i <= 10; i++)
        printf("%d ", i);
    printf("\n  i=%d  \n", i);

    for (j = 1; j <= 10; j++)
        printf("%d ", j);
    printf("\n  j=%d  \n", 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 \n", x);
        x++;
    }
    printf("\n  i=%d  \n\n", i);

    for (j = 1; j <= 10; j++)
    {
        printf("y=%d \n", y);
        ++y;
    }
    printf("\n  j=%d  \n", 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("\n  a = 5 ,b未賦值,若 b = a++,  則有:b = %d,a = %d  \n\n", b, a);  //輸出:b = 5,a = 6

    int c = 5, d;
    d = ++c;  //我們可以這樣理解該語句執行細節:步驟1、c=c+1=6;  步驟2、d=c=6;
    printf("\n  c = 5 ,d未賦值,若 d = ++c, 則有:c = %d , d = %d  \n\n", 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("\n  e = 16 , f未賦值,若 f = e++ + ++e,則有e = %d,f = %d  \n\n", 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("\n  j = 16, k未賦值,若 k = ++j+ j++,則有j = %d ,k = %d  \n\n", 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("\n  m = 20, n未賦值,若 n = 1 + m++,則有m = %d , n = %d  \n\n", 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("\n  p = 50, q未賦值,若q = 1 + ++p,則有p = %d , q = %d  \n\n", 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都同樣結果)  */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM