日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

C語言簡明講解操作符++和--的使用方法_C 語言

作者:清風(fēng)自在?流水潺潺 ? 更新時間: 2022-06-18 編程語言

一、++與--操作符的本質(zhì)

++ 和 -- 操作符對應(yīng)兩條匯編指令

前置

  • 變量自增(減)1
  • 取變量值

后置

  • 取變量值
  • 變量自增(減)1

下面看一段神奇的代碼:

#include <stdio.h> 
 
int main()
{
    int i = 0;
    int r = 0;
 
    r = (i++) + (i++) + (i++);
 
    printf("i = %d\n", i);
    printf("r = %d\n", r);
 
    r = (++i) + (++i) + (++i);
 
    printf("i = %d\n", i);
    printf("r = %d\n", r);
 
    return 0;
}

在 VS2012中,它的運行結(jié)果如下:

在 gcc 編譯器中,它的運行結(jié)果如下:

這是由于不同編譯器對 ++ 和 -- 的相對哦執(zhí)行次序不一樣。

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

  • C 語言中只規(guī)定了 ++ 和 -- 對應(yīng)指令的相對執(zhí)行次序
  • ++ 和 -- 對應(yīng)的匯編指令不一定連續(xù)運行
  • 在混合運算中,++ 和 -- 的匯編指令可能被打斷執(zhí)行

++ 和 -- 參與混合運算結(jié)果是不確定的。

筆試面試中的“奇葩”題

貪心法:++,-- 表達式的閱讀技巧

  • 編譯器處理的每個符號應(yīng)該盡可能多的包含字符
  • 編譯器以從左向右的順序一個一個盡可能多的讀入字符
  • 當讀入的字符不可能和已讀入的字符組成合法符號為止

下面看一段代碼:

#include <stdio.h>
 
int main()
{   
    int i = 0;
    int j = ++i+++i+++i;
    
    int a = 1;
    int b = 4;
    int c = a+++b;
    
    int* p = &a;
    
    b = b/ *p;
 
    printf("i = %d\n", i);
    printf("j = %d\n", j);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
      
    return 0;
}

運行后編譯器會報錯:

這行代碼為什么報錯呢?int j = ++i+++i+++i; 原因就是編譯器發(fā)現(xiàn) ++i 后由于貪心,會繼續(xù)往下找,發(fā)現(xiàn) ++i+ 后編譯器覺得符合語法規(guī)則,繼續(xù)往下找,當出現(xiàn) ++i++時編譯器感覺不對,開始計算,就變成 1++,這是不合法的,所以編譯器就會報錯。

空格可以作為C語言中一個完整符號的休止符編譯器讀入空格后立即對之前讀入的符號進行處理。

所以下面這么寫就可以:

#include <stdio.h>
 
int main()
{   
    int i = 0;
    int j = ++i + ++i + ++i;
    
    int a = 1;
    int b = 4;
    int c = a++ + b;
    
    int* p = &a;
    
    b = b/ *p;
 
    printf("i = %d\n", i);
    printf("j = %d\n", j);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
      
    return 0;
}

編譯結(jié)果如下:

三、小結(jié)

  • ++ 和 -- 操作符在混合運算中的行為可能不同
  • 編譯器通過貪心法處理表達式中的子表達式
  • 空格可以作為C語言中一個完整符號的休止符
  • 編譯器讀入空格后立即對之前讀入的符號進行處理

原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/123378988

欄目分類
最近更新