++、--操作符使用分析

符號的技巧

專題二:符號的技巧。包括以下章節:

  • 註釋符號
  • 接續符和轉義符
  • 單引號和雙引號
  • 邏輯運算符使用分析
  • 位運算符分析
  • ++、–操作符使用分析
  • 優先級和類型轉換分析

問題

  • int = 3; (++i)+(++i)+(++i)=?
    • c語言灰色地帶

6-1.c

#include<stdio.h>

int main()
{
    int i = 3;

    //(++i)+(++i)+(++i)=?
    //編譯器1:三個小括號計算一遍,得到i=6,然後6+6+6=18
    //編譯器2:前兩個小括號計算,得到5+5;然後計算最後一個小括號,5+5+6=16
    //一般編譯器是按照編譯器2來編譯的
    //在編程中儘量不要這樣寫,因爲可能得到的不是我們想要的結果。
    printf("%d\n", (++i)+(++i)+(++i));

    return 0;
}

結果:
這裏寫圖片描述

  • 逗號表達式
#include<stdio.h>

int main()
{
    int x;
    int i = 3;
    //(++i, i++, i+10)=?
    //從左到右的順序求值,最後一個表達式的值就是逗號表達式的值
    //++i=4,i++=4(i=5,表達式的值=4),i+10=15
    x = (++i, i++, i+10);

    printf("%d\n", x);

    return 0;
}

結果:
這裏寫圖片描述

c語言中的貪心法

  • 編譯器處理每個字符應該儘可能多的包含字符
  • 編譯器以從左到右的順序一個一個儘可能多的讀入字符
  • 當即將讀入的字符不可能和已讀入的字符組成合法字符爲止

實例分析6-1

#include<stdio.h>

int main()
{
    int i = 0;
    //編譯器讀到++i++,懵逼了,出錯。
    int j = ++i+++i+++i;
    //++i++,編譯器編譯錯誤相同
    //1++,編譯器編譯錯誤相同
    int a = 1;
    int b = 2;
    int c = a+++b;

    int* p = &c;
    //b=b/*p;

    return 0;
}

結果:
這裏寫圖片描述

#include<stdio.h>

int main()
{
    int i = 0;
    //編譯器讀到++i++,懵逼了,出錯。
    //int j = ++i+++i+++i;
    //++i++,編譯器編譯錯誤相同
    //1++,編譯器編譯錯誤相同
    int a = 1;
    int b = 2;
    //a+++b,編譯器編譯正確。即a++ + b
    int c = a+++b;

    printf("%d\n", c);

    int* p = &c;
    //b=b/*p;

    return 0;
}

結果:
這裏寫圖片描述

#include<stdio.h>

int main()
{
    int i = 0;
    //編譯器讀到++i++,懵逼了,出錯。
    //int j = ++i+++i+++i;
    //++i++,編譯器編譯錯誤相同
    //1++,編譯器編譯錯誤相同
    //int a = 1;
    //int b = 2;
    //a+++b,編譯器編譯正確。即a++ + b
    //int c = a+++b;

    //printf("%d\n", c);

    int* p = &c;
    //編譯出錯。根據貪心法規則,編譯器會認爲/*爲註釋符號。
    b=b/*p;

    return 0;
}

正確的寫法應該是加上空格

#include<stdio.h>

int main()
{
    int i = 0;
    //相當於(++i)+ (++i)+ (++i):先計算前2個括號,i=2,2+2;計算後一個括號,2+2+3=7
    int j = ++i+ ++i+ ++i;
    printf("%d\n", j);

    int a = 1;
    int b = 2;
    int c = a+++b;
    printf("%d\n", c);

    int* p = &c;
    //2/3=0,取整數等於0
    b = b / *p;
    printf("%d\n", b);

    return 0;
}

結果:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章