c輸出中的自增自減,求執行結果的解釋

2022-05-25 05:17:23 字數 3114 閱讀 9499

1樓:八哥說科技

自增運算子 ++ 會把運算元加 1,自減運算子 -- 會把運算元減 1。字首形式,則會在表示式計算之前完成自增或自減,字尾形式,則會在表示式計算之後完成自增或自減。

解析:x = x+1; 等同於 x++; x = x-1; 等同於 x--; 無論是自增運算子還是自減運算子,都可以放在運算元的前面(字首)或後面(字尾)。例如:

x = x+1; 可以寫成:++x; 或者:x++; 字尾形式。

自增自減運算子存在於c/c++等高階語言中,它的作用是在運算結束前(前置自增自減運算子)或後(後置自增自減運算子)將變數的值加(或減)一。相較於這些語言中的+=和-=運算子,自增運算子更加簡潔,且可以控制效果作用於運算之前還是之後,具有很大的便利性。

2樓:

自右至左計算。注意後++或--在輸出後生效,而前++或--在輸出前生效。自己就會了!

3樓:

叔叔中的自掙自撿球執行,結果的解釋你要想求出執行,結果首先你把輸出中的所有的內容發過來,我給你點

4樓:

c,扔在嗎。齊齊哈爾大學※六點半下班了嗎

c語言自增自減的輸出問題

5樓:

printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n",i,++i,--i,++i,++i,-i++,-i--);

右邊引數集i,++i,--i,++i,++i,-i++,-i-- 是從最右邊開始入棧的,也就是先執行最右邊的表示式。

-i-- 表示式的值為-i,也就是-8,然後i--使得i的值更新為7

-i++ 此時i的值為7,表示式的值為-i,也就是-7,然後執行i++使得i更新為8

++i 此時i的值為8,先執行++i使得i值變為9,表示式的值為自加後i的值也就是9

++i 此時i的值為9,先執行++i使得i值變為10,表示式的值為自加後i的值也就是10

--i 此時i的值為10,先執行--i使得i值變為9,表示式的值為自加後i的值也就是9

++i 此時i的值為9,先執行++i使得i值變為10,表示式的值為自加後i的值也就是10

i 此時i的值為10

原輸出語句應該輸出10 10 9 10 9 -7 -8

我在c++builder2010下測試是如此。

一般的,大部分c語言編譯器處理函式中引數入棧都是從右往左的。你說的vc6下的測試結果,倒數第二個人是-8,這樣的情況我也覺得奇怪。

而在vc2008下測試的結果則是:10 10 10 10 10 -7 -8

也許有編譯配置引數可以設定,來改變編譯效果。

6樓:知了叫醒了夏

同學,vc6.0沒有錯,自增自減都是自右往左讀的,只有左加左減,i值變,既先自加後運算;右加右減,先運算再自加,是在分號後再計算。但輸出是自左向右依次輸出的。希望對你有幫助

7樓:暴躁內酷

我懂了 樓主 第一 printf裡面是從右到左算 第二 負號運算沒有參與賦值

8樓:匿名使用者

++i整體的值是原來的值

i++是加1後的值

答案錯了吧,第乙個怎麼也是8呀

這玩意兒不很重要,二級最多也就是一分,別看了

9樓:白痴弟弟

++i是先加i。i++是後加i。順便說一句,vc6這編譯器不靠譜。用gcc吧

10樓:滄海遊龍

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

printf("%d\n",++i);

printf("%d\n",--i);

printf("%d\n",++i);

printf("%d\n",++i);

printf("%d\n",-i++);

printf("%d\n",-i--);

輸出結果:8 9 8 9 10 -10 -11;

i++ :先在i所在的表示式中使用i的當前值,後讓i加1++i :讓i先加1,然後在i所在的表示式中使用i的新值printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n",i,++i,--i,++i,++i,-i++,-i--);

輸出結果應該涉及到了printf()這個函式底層的實現,它並不是和我們想的一樣,輸出i,然後運算++i;然後輸出,在運算--i,輸出……。這個可以將這個分行寫,加入斷點,就能看出他是一次性將結果輸出。

11樓:匿名使用者

強烈建議這個問題不要研究!

是未定義的行為!!!

各個編譯器可以有不同的解釋方式!本來想貼個**給你參考一下的,可是網速糾結了一下!

回來再貼給你看!

這類問題都不要搞!沒有意義!!!

以下為引用:

因為這些++i都是在一條語句中的,所以出現這種結果和編譯器有關係.

畢竟這條語句是要翻譯成彙編的,而b的值肯定也是要存放在暫存器中的,但是儲存在暫存器中怎麼++,什麼時候算++都和編譯器有關係,所以這個結果是混亂的.如果想知道怎麼得到的就看彙編**.

所以不推薦一條語句中做多個事情,要把他們分開來做.

12樓:

這段**程式設計風格不好,具體執行結果跟編譯器有關,在別的編譯器上結果可能就不一樣了,其實沒有什麼研究意義的……這個結果產生的原因有二:

1:後自增/後自減變數是先返回值再自增/自減,從結果看,應該是printf執行完了再做i的後自增、後自減。 所以你這段**實際上的執行順序是printf(...

,i,++i,--i,++i,++i,-i,-i);i++;i--;

2:c語言呼叫函式時的引數入棧順序是從右往左,vc6.0採用了跟入棧順序一致的引數計算順序,所以是先計算最右的-i--,接下來-i--……最後才到最左邊的++i,i。

所以就得到你這個結果。

13樓:匿名使用者

正確答案是8 9 8 9 10 -10 -11

14樓:

printf裡用的",i,++i,--i,++i,++i,-i++,-i--部分是從右往左的哦,好好看看書

15樓:天使的喵

樓上的樓上說的是對的

c語言關於自增自減的問題,c語言的自增自減問題

乙個是先運算後加減 就輸出了x是10 但是再次輸出就是9了 後乙個是先加減後輸出 所以是9 再輸出還是9 前 表示先自減,再使用變數 n y等價於 y y 1 n y 這兩步操作 後 表示先用變數,再進行自減 n x 等價於 n x x x 1 這兩步操作 因此,題目答案為 10 9 d正確 舉個例...

C 中的自增加運算子,C 運算子過載之自增 自減 運算子

簡單的說 運算子就是變數的內容加1個單位,但究竟1個單位是多少要看實際版定義的變權量的型別 比如 定義int a 0 那麼a 表示在下次使用a時a中存放的變數會變為1,即a 0 1 如果定位為int a b 這裡我們假設b已經經過了定義,為int b 10 此時a中存放的內容為b 0 的位址,我們假...

c語言求矩陣a,b的乘積,結果存入矩陣c中並按矩陣形式輸出。為什麼這樣做不對呢?求大神指點

前面幾樓已經回bai答過了,我想說的du是你的大括號太多zhi了dao,而且不注意規範專,兩個for的地方完全屬沒必要打括號,也沒有注意括號的對應,太雜亂了!我覺得雖然這是小事,但卻非常影響程式的閱讀,假如你參加面試的時候寫程式是這樣的,公司肯定不會要你!細節相當重要希望你能注意到這一點。j變數的迴...