1. 程式人生 > >17++與--操作符

17++與--操作符

本質 變量 不可 包含 c語言 可能 com gcc urn

++和--操作符的本質

++和--操作符對應兩條匯編指令,前置時,表示變量自增(減)1,然後取變量值,後置表示變量先取變量值,然後變量自增(減)1

一個有趣的問題

int i = 0;
(i++) + (i++)+(i++);
(++i) + (++i) + (++i);

上面兩個表達式的值分別是多少?

例子1:頭疼的++

#include<stdio.h>

int main()
{
    int i = 0;
    int r = 0;
    r = (i++) + (i++) + (i++);

    printf("i = %d,r = %d\n"
,i,r); r = (++i) + (++i) + (++i); printf("i = %d,r = %d\n",i,r); return 0; }

在不同的編譯器中,運行結果不同,在gcc中結果為3,3 ————————6,16

面試中的奇葩題

技術分享圖片

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

  • 編譯器處理的每個符號應該盡可能多的包含字符
  • 編譯器從左到右的順序一個一個盡可能多的讀入字符
  • 當讀入的字符不可能和已讀入的字符組成合法字符未知

例子2:貪心法閱讀

#include<stdio.h>

int main()
{
    int i = 0;
    // int j = ++i+++i+++i;
int j = ++i+ ++i+ ++i; printf("i = %d\n",i); // 3 printf("j = %d\n",j); // 7 不同編譯器結果可能不同 // printf("j = %d\n",j); int a = 1; int b = 2; int c = a+++b; printf("c = %d\n",c // 3 return 0; }

小結

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

17++與--操作符