C語言 關於自加自減,什麼是C語言中關於自加自減?

時間 2023-03-22 21:05:08

1樓:匿名使用者

首先,對於第一個問題我的答案是:否。

因為嚴格的講,賦值運算中必須有賦值運算子「=」就像你題目中的所說的那是自增自減語句。但是呢,他的結果又相當於一個賦值運算的結果。要不為啥說c靈活呢,是吧,呵呵。

對於第二個問題,我的答案是:都對!!!

因為,這完全取決於你所使用的編譯器,不同的編譯器對上述表示式的運算結果是不同的。

有的運算器是那三個自增運算同時進行,這時答案就是3;有的編譯器對那三個自增運算的運算順序是從左到右的,這時的答案就是5.

明白了吧,呵呵。

2樓:匿名使用者

根據《c語言規則》

①是。j++;等價於j=j+1; ,j--;相當於j=j-1;

所以自加自減語句都是賦值語句。

②int a=2; /定義了整型變數a,並賦了初值2*/(a++)a++)a++)假設令t=((a++)a++)a++)則 t=8 */

因為每一個相乘的因子都使用了一次,所以a在裡面都自增了一次。

即: a=a+3=5

3樓:網友

不同的編譯器結果不一樣。

什麼是c語言中關於自加自減?

4樓:匿名使用者

自增分字首自增和字尾自增。無論是什麼,執行自增都有1個***,就是原來變數的值會增加1。例如int a=1;a++;或int a=1;++a;執行後,a==2。

而他們的區別就在於整個自增表示式的值不同。如(a++)的值是變數a自增以前的值,如上面例子,(a++)1。而(++a)的值則是變數a自增以後的值,即(++a)==1+1==2。

結合性分為左結合和右結合,只有優先順序相同時才看結合性,例如表示式a+b*c+d-e*f,因為乘法優先順序別高於加減,所以a+(b*c)+d-(e*f),又因+-運算是左結合,所以只a+(b*c)再(a+(b*c))+d再(a+(b*c)+d)-(e*f),假如是右結合,就先d-(e*f),也就反過來了。這裡其實看不出有什麼區別,怎麼樣結果都一樣。

但看到*p++運算就不同了,因為*與++運算同一優先順序,左結合結果就是(*p)++右結合就是*(p++)這是區別很大的,書上還很多例子,你可以自己去看的。

強制轉換問題就是在可以轉換的情況下按要求轉換。如float x=;

則(int)x==9。將實型轉為整型是採用截掉小數部分的做法。

例如還可以整型轉字元常量等等,例如,int a=97;則(char)a=='a',因為字元a的ascll碼為97。

()裡面即是你要轉換的型別。

5樓:匿名使用者

通俗點吧,自增就是加1,分字首自增和字尾自增,字首自增就是先讓自己加1然後再使用,字尾自增就是先使用,然後這個原來的值加1,字尾自減也是如此。

6樓:匿名使用者

a++等價於a=a+1;先賦值後做加1操作;

a--等價於a=a-1;先賦值後做減1操作;

++a等價於a=a+1;先做加1操作後賦值;

--a等價於a=a-1;先做減1操作後賦值;;

7樓:匿名使用者

a++,a--

++a,--a

a+=,a-=

都算作自加自減,在具體使用下和普通的+-法沒有很大的區別,但是執行速度更快。

c語言的自加自減運算子

8樓:我才是柳隨風

這實在是個令人糾結的問題。

c語言中區分前自增與後自增,它們都有***,尤其是後自增。

前自增可能更好一點,它不產生臨時變數,效率更高一些。

++y相當於:y=y+1;在變數的使用之前先自增。

y++相當於:y; 其它語句。y=y+1;也就是使用它時,它的值不變,在其使用之後的某一時刻但在再次使用它前其值加一。而且不同的編譯器不一定有一致的實現行為。

a=(y++)y++)y++)這是一條語句,通常的編譯器實現會將此語句一次性掃描完成。這種情況下,y++會保持其值不變,此語句完成後,將y的值遞增3次。

b=(+y)+(y)+(y)這也是一條語句,編譯器掃描完此語句後,先將y遞增3次,再作+運算,將運算結果賦予b,此時b應該為24。 但是不同的系統及編譯器不一定這樣實現,還有可能y依次遞增,其結果是21。

9樓:齊爾大君雅

printf("%d",+i);/9i=9printf("%d",-i);/8i=8printf("%d",i++)8i=9printf("%d",i--)9i=8printf("%d",-i++)8i=9printf("%d",-i--)9i=8前面是輸出值,後面是執行該語句後的i值。-i++應該這樣分,輸出的是-i,執行後i自動加的值始終是正的,最後2個輸出的是-i。

10樓:沐晨長孫振國

第五個:-i

++是先把。

-i輸出,在i=i+1;則i

=9;輸出為:

-8第六個:

-i--是先把-i輸出,再i=i-1;則i=8;

輸出為-9;

輸出負數是因前面的。

-符號。,而i是正數。

11樓:昌秀榮歷媼

a++和++a,前一個先把a用了。

然後再給a加一,後一個。

先把a自己增加一然後再。

做運算;例如:x=5;

y=++x;

x先加到6,然後再將x的值應用到表示式y=x中,y值為6x,y都為6

x=5;y=x++;

x為6,y為5.

同樣,對於你的陣列也適用!

12樓:七彩虹科技****

從左往右看,比如++m,就是m的值先自加1,再呼叫,而m++就是先呼叫m,再自加1. 舉個例子 #include main() a的值先自加1,再呼叫,而b++就是先呼叫m。 -m m-- 同樣的意思,只不過是減法而已。

13樓:匿名使用者

第一條,實際上等於a=y+y+y,然後做三次y=y+1;

第二條,實際上是先做3次y=y+1,也就是b=8+8+8,應該是24……得,自己也亂了……

14樓:匿名使用者

如果你只是使用a=y 或b= y的話,語句是完全沒有問題的。但同一語句把y自增了多次,iso ansi c 沒有給出標準,在不同編譯器上的結果就可能不同。自增這樣的操作符雖然能寫出簡潔的**,但濫用的話可能帶來很多問題哦。

你最好把它分成幾條語句,就絕對沒有歧義了。《c primer plus》講解得很清楚。

15樓:白龍無馬

第一條是先使用該變數的值再進行累加。

第二條是先累加再使用該變數的值。

書上有寫的。

c語言的自增自減問題

16樓:勿忘心安

計算:從右往左,並輸出到「緩衝區」。

1、緩衝區是一堆疊。

2、第一步:處理後面的「i--」8進入緩衝區,i=7。緩衝區:8 <-指標)

第二步:處理「i++」7進入緩衝區,i=8。

緩衝區:7 8<-第三步:處理」--i「。

8進入緩衝區,i=7.緩衝區:8 7 8第四步:

處理「++i」 先自增1,然後8進入緩衝區,i=8 .緩衝區: 8 8 7 8

3、輸出緩衝區資料(棧規則):8 8 7 8另外自增 、自減 、還可能和編譯器有關係 。

17樓:小云小冉

這裡首先說一句,你這種用法應該是不合法的,至少是很不可取的。因為像+、-這類算術運算子c語言並未規定運算元的求值順序,在不同的編譯器上,有可能先求做運算元,也有可能先求右運算元。所以建議不要採用這種不確定的式子。

你這裡是先求左運算元,也就是先求++n表示式的值,因為是字首自增,表示式(左運算元)值為6,此時n也變為6.然後求右運算元值,即表示式n++;的值,因為是字尾自增,所以表示式的值是6,因此第二運算元的值是6,因此結果是36.之後n變為7.

18樓:匿名使用者

scanf輸入6[x=6], x>5成立, 緊接著無條件執行x++[x=7], 由於前面條件滿足, printf輸出7

scanf輸入4[x=4], x>5不成立, 緊接著無條件執行x++[x=5], 由於前面條件不滿足, printf輸出5, 執行x--[x=4]

因此輸入6時得到輸出7; 輸入4時得到輸出5

19樓:已存在這個名字

輸入6的時候,滿足if語句,x+1,輸出7,程式結束;

輸入4的時候,不滿足if語句,x+1,輸出5,x-1,程式結束。

20樓:傻仔青蛙

++在前面表示先進行變數自增,再執行算式,所以m=++i,先執行++i,i變為9,再賦值給m;

++在後面表示先進行算式,再執行變數自增,所以n=j++,先執行n=j,n被賦值為10,再j自增為11

21樓:匿名使用者

++前,表示先自加,後運算。

後++,表示先運算,後自加。

.所以,m=++i;先執行自加,即i=i+1;得i=9;

再運算,m=i;得m=9;

n=j++;先運算,即n=j;得n=10;

再自加,即j=j+1;得j=11;

.結果就是:

i=9,j=11,m=9,n=10.

22樓:匿名使用者

有一個簡單的記憶方法,++在前,就是先自增,i在後,就是自增以後再給值;相反,i在前,就是先給出i的值,++在後,就是把值給出來以後再自增。

m=++i; i先自增,自增以後為9,然後把9給mn=j++;先把j的值10給n,然後再自增,j變成了11所以得結果。

23樓:看灰過來了

把自增或者自減表示式作為函式引數,本身就應該被避免的,因為不同的編譯系統,在計算的時候,方法並不統一。例如;

i=1;c=fun(i,++i);

當從左向右計算,那就是c=fun(1,2);

要是從右向左計算,就是c=fun(2,2);

這類問題不必深究,而是應該在呼叫函式之前,將實參的值給它確定了,然後再作為實參去呼叫函式。

24樓:唐博

第一段**:

++i是先增加i的值,然後使用。

p=f(i,++i); 是先執行++i,後進行函式呼叫。因為執行了++i以後,i的值已經變成了3,所以相當於p=f(3,3);

你可以在函式f裡面把a和b的值列印出來,你會發現a和b都是3.

第二段**:

i++是先使用i的值,然後把i的值加1.

所以相當於先執行p=f(2,2);

執行之後,把i的值變成3.答案應該是0.

我懷疑你們老師的課件寫錯了,建議你去問問他。

25樓:windy笨笨狗

主要自增自減問題,方面你記憶,給個方法。

x++表示式的值從左到右看x的位置,此時x在++左,還沒有++,故 x++表示式的值就是x值。

相反++x,x在++右邊,表示式的值即x+1的值但是不管哪種,只要執行完了,x的值就+1

x--,x一樣。

故: 6時: if(6>5) ,輸出 74時: if(4>5)不滿足, 執行x--,但是此時x已經執行了一遍++,故x在--前為5

x--表示式的值 為5

希望對你有用,望採納。

26樓:錢柯偉有錢

這個問題以前我也不懂,現在會了。不懂確實很煩人。首先,i=8,m=++i,前置是先+1,再取值,那麼m=9,而此時的i就是+1之後的運算結果,i=9.

j=10,n=j++.在後,就是先取值,再+1;那麼n先取值就是的值就是j+1後的值,j=11.

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

這種問題,沒必要糾結。如果是 q j j 結果是7 7 14連續加法,正常邏輯應該為3 8 24,但實際上,因為編譯器的優化,連加被分割為兩次暫存器運算,等價於 int edx j j q edx j 這樣就成了7 7 8 22 這是優化問題,不必糾結。這就是實際運算模式,如果明白彙編,可以看懂。 ...

C語言中增1減1運算子,c語言關於自增自減運算子的一個問題

小嫣老師 自增 和自減 操作符為物件加1或減1操作提供了方便簡短的實現方式。它們有前置和後置兩種使用形式。i 等同於 i i 1。和 既可寫在變數之前,稱為前置運算,如 a a 和 也可以寫在變數之後,稱為後置運算,如 a a 對單獨一個變數實行前置運算或後置運算,其結果是相同的,都是使該變數的值增...

c語言中自加 自減 運算的資料型別可以是float和do

小夏在深圳 不可以是double和float 只可以是整型。比如int a a 1 a a 則a 1 在c語言中還有一種更簡單的寫法,就是a 或者 a 這種寫法叫做自加或自增 意思很明確,就是自身加一。相應的,也有a 和 a,叫做自減,表示自身減一。和 分別稱為自增和自減運算子。自增和自減的示例 i...