C語言中自加與自減運算子前置與後置結果為什麼有時一樣有時不一樣啊,怎麼區別

時間 2021-09-07 11:59:35

1樓:智慧型it人生

這個要看你所用的編譯環境了,不同的編譯環境執行的順尋不一樣一般情況下是:

如++i,--i.在使用i之前,先使i的值加(減)1i++,i--,在使用i之後,使i的值加(減)1

2樓:匿名使用者

如++i,--i.在使用i之前,先使i的值加(減)1

i++,i--,在使用i之後,使i的值加(減)1

3樓:匿名使用者

想得到正確答案,請提供詳細**

c語言中自加自減運算子前後位置的區別

4樓:匿名使用者

嗯,自加(自減)從結果上來看都是加1(減1),這點肯定沒錯。但是用在表示式中就會有差別了,拿你的例子來說i=5,如果執行下面的語句:

int b = i++;

結果b的值就是5,i的值變為6;

如果是b=++i

那麼b的值就是6,i的值也是6;

所以i++與++i使用在表示式中的時候的區別就是:前者是先使用i的當前值進行計算,再加1;而後者是先加1再進行計算,自減運算也是一樣的。

不知道我說的清楚不

5樓:du瓶邪

以自增運算子為例,當自增運算子++作用於乙個變數時例如:當i=3時++i這個算術表示式的值為4,同時變數i的值也由原來的3改變為4。

一般情況下,計算表示式後不改變變數本身的值,而++運算子和--運算子組成的表示式計算後,則改變變數的值,這稱為運算子的***。

這類運算子在計算表示式時,一定要注意區分表示式的值和變數的值。

6樓:匿名使用者

如果是這樣,int,i=5 , j=6 , n

n=i*j 如果是i++那n=31,如果是++i就是36,i++是先運算再自曾,相反先自增在運算,i--相同。

c語言關於自增自減運算的問題

7樓:匿名使用者

這種問題,沒必要糾結。

如果是 q=(++j)+(++j);//結果是7+7=14連續加法,正常邏輯應該為3*8=24,但實際上,因為編譯器的優化,連加被分割為兩次暫存器運算,等價於:

int edx = (++j)+(++j);

q = edx + (++j);

這樣就成了7+7+8=22

這是優化問題,不必糾結。

這就是實際運算模式,如果明白彙編,可以看懂。

8樓:匿名使用者

這個細心點就好 ++i 和i++的區別 共同點都是i自增1 只是++i和i++前增後不變 在計算過程中一定要注意i值得變化 在算一遍就好

9樓:匿名使用者

c語言的前置++和後置++,稱為自增運算子前置--和後置--稱為自減運算子,下面以自增運算子的區別來加以介紹,自減類似

如果單獨寫 自增運算子為乙個語句,二者沒有區別++i; 和 i++; 都是讓i+1賦值給i但是如果把自增運算子寫入到另外表示式中二者就有很大區別了例如i=5;

j=i++;

執行後i為6,j為5

i=5;

j=++i;

執行後i為6,j為6

10樓:雪豹出擊

在乙個完整的表示式中使用自增或者自減是由***的。也就是說c語言不保證 p=(i++)+(i++)+(i++),這三個i++的執行順序,並不一定是從左至右分別執行三個i++,有可能是跳著執行,例如q中的三個++j就不是從左至右依次執行的。但是c保證乙個完整的表示式中,p,q的i,j分別自增了三次,也就是保證最後的i,j 都是8,但是不保證p,q的值。

所以應該避免在程式中使用類似的聯絡自增自減表示式,以避免出現不可預知的結果啊。

11樓:

這個結果和編譯器有關,沒什麼意義,程式設計時應盡量避免。

12樓:

你看這個**。先求的p結果是14 , 按我們算應該是13,但編譯器是在編譯過程中認為()裡面的優先順序的相同的,而且都是先自增,所以編譯器就把先把這兩個自增計算了,然後就是7+7了。

而下面是一樣的,前二個也是同時進行。後面才進行也就是7+7+8,最後為22.  (我以前也問過,老師用編譯後的彙編**給我解釋的)

13樓:oo鐵戒指

同求,為什麼我算的是21

c語言自增自減運算子用法

14樓:匿名使用者

a+++4等價於(a++)+4 從左到右盡可能多的取運算子

先理解自增自減的含義,他的作用就是使變數加一,這個是不會受到是字首或是字尾的影響的

(a++)+4=7 a=4

15樓:匿名使用者

c語言的抄前置++和後置++,稱為自增運算子前置--和後置--稱為自減運算子,下面以自增運算子的區別來加以介紹,自減類似

如果單獨寫 自增運算子為乙個語句,二者沒有區別++i; 和 i++; 都是讓i+1賦值給i但是如果把自增運算子寫入到另外表示式中二者就有很大區別了例如i=5;

j=i++;

執行後i為6,j為5

i=5;

j=++i;

執行後i為6,j為6

16樓:戀心

++a是先自加後操作,a++是先操作後自加,--也類同。

a+++4這種題是很容易混淆的,版而且對於一些運算規則權,不同的編譯系統有不同的規定,不建議樓主使用。

如果是作業題的話,直接用程式執行看看結果是多少就行了。

17樓:

int a[3];

for(i=0;i<3;) scanf("%d",a[i++]);

正確int a[3];

for(i=0;i<3;) scanf("%d",a[++i]);

下標越界

for(i=0;i<3;) scanf("%d",a[i++]);

相當for(i=0;i<3;)即回

for(i=0;i<3;i++) scanf("%d",a[i]);

而for(i=0;i<3;) scanf("%d",a[++i]);

相當for(i=0;i<3;)

所以下答標越界

18樓:匿名使用者

a+++4難道是++4優先????

c語言中自增自減運算子的運算次序?

19樓:匿名使用者

a=a++;

b=++b;

如下圖紅框中所示(gcc編譯時告警),上述兩種用法對編譯器來說是無定義的,

回即是說c語言標準答中沒有規定該怎麼處理,因為實踐過程中也沒人這麼用。

既然沒有標準,又不能說是語法錯誤,那就依賴編譯器實現。a編譯器實現可以讓a = 5,b編譯器實現也可以讓a = 6。因此,在實際專案中,不要寫這樣的語句。

20樓:荌繎丶誑嘢菰漃

後置遞增遞減運

算符,將運算元遞增或遞減1,再將運算元的原值返回,專也就是說有乙個臨時

屬變數用來存放原來的值,在完成遞增或遞減操作後,將臨時變數返回。

前置和後置區別就在這,前置返回的是新值,後置返回的是舊值。

21樓:心飛翔

i++是先抄使用i的值,再對i進行加1操作.

所以在p=(i++)+(i++)+(i++)裡面在計算p的值之前,i本身的值總是5.

所以p的值就是3個5所以是15.在運算完p之後,因為有3個i++,所以i做了3次自加運算,所以i最終是8.

q的變化同理.

所以最終列印結果是 15,15,8,8

關於C語言中自增自減運算子的疑問

對於每次判斷,會先判斷count的值是否小於5,然後count count 1如果此時條件滿足則繼續,否則退出迴圈。第1次遇到while判斷時 count 0判斷後count為1.第2次遇到while判斷時 count 1判斷後count為2.第3次遇到while判斷時 count 2判斷後coun...

c語言裡關於自增自減運算子的問題

金色潛鳥 字首加 減 與 字尾加 減 的不同 在於表示式 裡 的 值。表示式 裡,字首加 要先自增,後使用。表示式 裡,字首減 要先自減,後使用。表示式 裡,字尾加 要先使用原值。出了表示式後 再自增。表示式 裡,字尾減 要先使用原值。出了表示式後 再自減。a i 字首加 要先自增,後使用。執行 i...

c語言的自增自減運算子的題,求思考過程

i 是先使用i的值,再對i進行加1操作.所以在p i i i 裡面在計算p的值之前,i本身的值總是5.所以p的值就是3個5所以是15.在運算完p之後,因為有3個i 所以i做了3次自加運算,所以i最終是8.q的變化同理.所以最終列印結果是 15,15,8,8 你的問題我覺得涉及到對自增運算子的理解,i...