c語言逗號表示式的問題,C語言逗號表示式的問題 x 6,y 7,z 8 r func x ,y ,x y ,z

2021-03-27 14:57:01 字數 7183 閱讀 8210

1樓:匿名使用者

首先說明原理:

1)逗號運算子也稱順序求值運算子,即從左至右順序執行,最後乙個值會覆蓋前面的值,所以使用逗號將幾個表示式連線起來的帶括號的表示式,最終整個逗號表示式的值為最後乙個表示式的值。

2)自增和自減運算子有前置和後置之分,在混合運算中,前置是先自增或者自減,再進行取值;而後置恰好相反,即先取值進行運算,然後再自增或者自減。

在r=func((x--,y--,x+y),z--)這個函式呼叫中,第乙個引數使用了原理1)和2),第二個引數使用了原理2)。

首先對於第乙個引數(x--,y--,x+y),這是乙個逗號運算子,從左至右運算:x--(先取x的值,然後x自減,其值變為x=5),同理(先取y的值,然後y自減,其值變為y=6),但由於這是乙個逗號運算子,因此x+y的值為x+y=5+6=11,最終r=func((x--,y--,x+y),z--)=func(11,z--);

其次,z--同理,先取值z=8進行傳引數,進行函式呼叫r=func((x--,y--,x+y),z--),然後z才執行自減(從而z=7)

補充:如果x--,y--換成r=func((--x,--y,x+y),z--)結果也是一樣的,這是因為逗號運算子是從左至右進行運算的,先算完第乙個逗號之前的表示式,在計算第二個逗號之前的表示式,依此類推,故,無論是前置還是後置,x的值都是在計算第二個逗號之前已經改變;但是逗號運算子中最後乙個逗號除外(前置才起作用,後置對逗號表示式的結果沒影響。。。

書寫不易,人艱不拆,不喜勿噴,謝謝點讚!!!

2樓:匿名使用者

逗號表示式使用逗號連線起來的幾個式子。。從左往右執行,最後整個逗號表示式的值為最後乙個表示式的值。

所以先執行x-- y-- 然後執行x+y 最後整個逗號表示式的值為x+y的值。即11

z--表示在這個語句中先使用z。。語句之後在--。 即執行完r=()之後 z的值為7,但在當前z使用值為8

3樓:匿名使用者

因為x和y自減了以後作為第三個引數

而z--表示式的值為z自減之前的值,為8

表示式執行結束了以後,z為7

4樓:匿名使用者

x--, 是表示式評估

之後才遞減,評估完括號裡第乙個引數x--後,x變成5同理,評估完括號裡第二個引數y--, y變成6等到評估x+y時,5+6,自然就是11啦。

z--,評估之後才遞減,所以傳給func的值還是8。

c語言逗號表示式問題

5樓:匿名使用者

執行後a的值是6,printf列印的是13逗號表示式,從左往右計算,表示式值取最右邊的值a=2*3=6

a*5不改變a的值,直接忽略

a+7=6+7=13

執行後a的值是6,printf列印13

6樓:擁雲莊主

逗號表示式,計算順序從左到右,依次計算,返回最後乙個表示式的值,所以,最後輸出為13。

實際執行結果:

7樓:匿名使用者

表達du式1,表示式

2逗號表示式的求zhi解過程是:dao先求解表達專式1,再求解表達屬式2,整個逗號表示式的值是表示式2的值。

賦值操作的優先順序高於逗號表示式的優先順序

多個逗號表示式可以按照從左到右的順序結合,則程式計算應該是:

1、計算 a= 2 * 3->a = 6

2、計算 a * 5 ->a = 6

3、計算 a + 7 -> 6 + 7 = 13所以結果為13!

8樓:匿名使用者

k=(x,y,z);這種表示式的結copy果就是z的值但是是要一步一步計算的,顯示計算x,在就算y,最後z.並且把z的值賦給了k

上面的步驟是 a=2*3=6=x

a的值是6

a*5=30=y

a+7=6+7=13=z

所以最後的值就是13

9樓:匿名使用者

逗號操作符的優先順序是最低的,比賦值操作符低,所以最終a=6

10樓:朱光閎熙華

if(n==0,n==1)抄f=1

逗號表示式,每個子表

襲達式都會執行,整bai個表示式的結

du果是最zhi

後的dao子表示式的結果

上題就相當於if(n==1)f=1

你可以測試下

if(n=2,n=1,n=0)

檢視結果會是什麼

自己多實踐

11樓:會飛的小兔子

c語言bai逗號表達

式是由左向右進行的du:zhik=3*2=6,k+2=8,表示式返回8。

逗號表示式用法dao:

當順序點用回,結合順序是從

答左至右,用來順序求值,完畢之後整個表示式的值是最後乙個表示式的值。

示例:main()

擴充套件資料注意事項

(1) 逗號表示式的運算過程為:從左往右逐個計算表示式。

(2) 逗號表示式作為乙個整體,它的值為最後乙個表示式(也即表示式n)的值。

(3) 逗號運算子的優先級別在所有運算子中最低。

12樓:買蝶歷春

是你看的那個bai電子書

du表述有誤,逗號zhi運算子優先順序特別低,當然dao也比賦值運算版符=低,問題中的表權達式求值順序是:

1.x=a+b得到x的值為6,賦值表示式的值也為62.y=6得到y的值為6,賦值表示式的值也為63.b+c得到表示式的值為10

4.6,10最後得到逗號表示式的值為10

顯然電子書說的y等於整個逗號表示式的值是錯的,執行結果也說明了這一點

13樓:翠**易珍

逗號copy運算子的做優先順序是最低的,所以要先算賦值運算子.

y=(x=a+b),(b+c)是乙個表示式,包括兩部分:

表示式1是乙個賦值表示式,表示式2是乙個算術表示式.

老譚的書裡說的是整個逗號表示式的值是表示式2的值,所以,整個逗號表示式的值是b+c,y的值是表示式1的值,即a+b.

他寫錯了.這樣寫就對了y=((x=a+b),b+c);

14樓:星念之劍宇

第乙個三個式子是

a=3*5=15,

a*4,a+5=20

printf最後乙個式子的值,為20

第二個(a=15),(a*4),(a+5);

只有乙個賦值語句,所以a=15

printf的值自然是15

15樓:斐未摩雍

printf(...a=2*5,a*4,a+3)中的a=2*5,a*4,a+3是逗號表示式沒錯,可你並沒有求這逗號表示式的值,只是由乙個內%d對應a=2*5指印容

出了a的值,所以是10沒有任何錯誤。你把a=2*5,a*4,a+3用()括起來寫成(a=2*5,a*4,a+3),就是求其值了;試試看是不是13?

16樓:陶紫雲系南

printf只計算第乙個匹配表示式,而忽略多餘的,因此為10.

要想實現逗號表示式的值,將它們小括號括起來,作為乙個表示式。

17樓:晉凡邗人

你好在printf函式裡

%d預設的匹配值就是a=2*5

,想要逗號表示式需要拿出來寫,而且逗號表示式要有自己的括號。

c語言中逗號運算子怎麼用?

18樓:匿名使用者

一、用法:

1、當順序點用,結合順序是從左至右,用來順序求值,完畢之後整個表示式的值是最後乙個表示式的值。

main()

先算括號內的值:s+2=4,d+4=7;括號內應為(4,7),括號內取值只取最後乙個,如果沒有括號則取第乙個;a=12+7=19。

x=(y=3,(z = ++y+2) +5);

是首先把y賦值為3,把y遞增為4,然後把4加上2,把結果6賦值給z,接下來把z加5最後把x賦為結果值11。

2、注意事項:逗號運算子( , )是c語言運算子中優先順序最低的一種運算子。

二、其它用法:

1、在for裡面的應用:

int i;int j;

for(i=0,j=0;i<5;i++,j++)

2、當分隔符:int i,j;

擴充套件資料

運算子優先順序:

1、優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。

2、相同優先順序中,按結合順序計算。大多數運算是從左至右計算,只有三個優先順序是從右至左結合的,它們是單目運算子、條件運算子、賦值運算子。

3、基本的優先順序需要記住:指標最優,單目運算優於雙目運算。如正負號。

先算術運算,後移位運算,最後位運算。請特別注意:1 << 3 + 2 && 7等價於 (1 << (3 + 2))&&7.

邏輯運算最後計算。

19樓:次次次蛋黃公尺亞

在c語言中,多

個表示式可以用逗號分開,其中用逗號分開的表示式的值分別結算,但整個表示式的值是最後乙個表示式的值。

具體用法:

假設b=2,c=7,d=5,

a1=(++b,c--,d+3);

a2=++b,c--,d+3;

對於第一行**,有三個表示式,用逗號分開,所以最終的值應該是最後乙個表示式的值,也就是d+3,為8,所以a1=8。

對於第二行**,那麼也是有三個表示式,這時的三個表示式為a2=++b、c--、d+3,(這是因為賦值運算子比逗號運算子優先順序高),所以最終表示式的值雖然為d+3,為8,但a2=3。

注意:逗號運算的結合性是從左至右,完畢之後整個表示式的值是最後乙個表示式的值。

假設:int a,x=2,y=5;

(1)a[1]=(x+3,y++,x++);那麼最終結果是:a[1]=2 x=3 y=6; )

(2)a[2]=(x++,x+3,x+7);那麼最終結果是:a[2]=10 x=4;

20樓:天雲一號

逗號運算子( , )是c語言運算子中優先順序最低的一種運算子,結合順序是從左至右,用來順序求值(最後乙個逗號後面表示式的值作為整個表示式的值)。

下面舉例說明逗號運算子的使用方法:

int a=3, b=5, c;

c = a>b, a+b;   // 執行後c值為0,因為逗號運算子的優先順序低於賦值運算子,所以先將a>b的結果(為0)賦值給c,之後運算a+b(結果不儲存),所以c=0

c = (a>b, a+b); // 執行後c值為8,因為括號的優先順序高於賦值運算子,所以先算括號內的表示式,此時計算結果為最後乙個表示式的值,即a+b的值,所以c=8

21樓:匿名使用者

2樓說的很詳細了 ,逗號運算子

的作用是將若干表示式連線起來。它的優先級別在所有運算子中是最低的,結合方向是"自左至右"的。其值是最後乙個表示式的,其間所有的都要計算,你所說的 a=12+(s+2,d+4); 先算s+2.

的4,然後算d+4,最後逗號表達是式的值是d+4=7,整個表示式的值是12+7=19,

22樓:匿名使用者

回答zw791:

括號運算子的結果是取括號內最右邊表示式的結果.

d+4=7,12+7=19

23樓:匿名使用者

2-4 c基礎知識 3逗號運算子

24樓:匿名使用者

c語言提供一種特殊的運算子——逗號運算子。用它將兩個表示式連線起來。如:

3+5,6+8

稱為逗號表示式,又稱為「順序求值運算子」。逗號表示式的一般形式為

表示式1,表示式2

逗號表示式的求解過程是:先求解表示式1,再求解表示式2。整個逗號表示式的值是表示式2的值。例如,上面的逗號表示式「3+5,6+8」的值為14。又如,逗號表示式

a=3*5,a*4

對此表示式的求解,讀者可能會有兩種不同的理解:一種認為「3*5,a*4」 是乙個逗號表示式,先求出此逗號表示式的值, 如果a的原值為3,則逗號表示式的值為12,將12賦給a, 因此最後a的值為12。另一種認為:

「a=3*5」是乙個賦值表示式」,「a*4」是另乙個表示式,二者用逗號相連,構成乙個逗號表示式。這兩者哪乙個對呢?賦值運算子的優先級別高於逗號運算子, 因此應先求解a=3*5(也就是把「a=3*5」作為乙個表示式)。

經計算和賦值後得到a的值為15,然後求解a*4,得60。整個逗號表示式的值為60。

乙個逗號表示式又可以與另乙個表示式組成乙個新的逗號表示式,如(a=3*5,a*4),a+5 先計算出a的值等於15,再進行a*4的運算得60(但a值未變,仍為15),再進行a+5得20,即整個表示式的值為20。

逗號表示式的一般形式可以擴充套件為

表示式1,表示式2,表示式3……表示式n

它的值為表示式n的值。

逗號運算子是所有運算子中級別最低的。因此,下面兩個表示式的作用是不同的:

① x=(a=3,6*3)

② x=a=3,6*a

第①個是乙個賦值表示式,將乙個逗號表示式的值賦給x,x的值等於18。第②個是逗號表示式,它包括乙個賦值表示式和乙個算術表示式,x的值為3。

其實,逗號表示式無非是把若干個表示式「串聯」起來。在許多情況下,使用逗號表示式的目的只是想分別得到各個表示式的值,而並非一定需要得到和使用整個逗號表示式的值,逗號表示式最常用於迴圈語句(for語句)中.

請注意並不是任何地方出現的逗號都是作為逗號運算子。例如函式引數也是用逗號來間隔的。如

printf("%d,%d,%d",a,b,c);

上一行中的「a,b,c」並不是乙個逗號表示式,它是printf函式的3個引數,引數間用逗號間隔。

如果改寫為

printf("%d,%d,%d",(a,b,c),b,c);

則「(a,b,c)」是乙個逗號表示式,它的值等於c的值。括弧內的逗號不是引數間的分隔符而是逗號運算子。括弧中的內容是乙個整體,作為printf函式的乙個引數。

c語言表達能力強,其中乙個重要方面就在於它的表示式型別豐富,運算子功能強,因而c使用靈活,適應性強。在後面幾章中將會進一步看到這一點。

c語言for迴圈空表示式,C語言for第乙個表示式留空是什麼意思?

d語句是你迴圈執行的語句,如果你不想讓它執行的話可以 for a語句 b語句 c語句 就不會提示錯誤了 可以明白了for語句的構成和作用,就能更好的靈活運用它了。1 for語句的一般格式 for 變數賦初值 迴圈繼續條件 迴圈變數增值 2 for語句的執行過程 執行過程如圖5 1所示。1 求解 變數...

c語言中表示式,c語言中表示式( x y )是什麼意思?

條件語句,是邏輯 非 的符號,x 就是x為假的意思,y 就是y y 1的意思。和起來就是判斷x是否為真或者判斷y是否已經自減 判斷x的值是bai否為0 如果x為0,則整個du表示式的zhi值為邏輯真,並且y 就不執行了 dao 如果x為0,那麼內再判斷y的值是否為非 容0 y的值是非0,整個表示式的...

C語言中表示式105的值是,C語言表示式105的值是

關係運算子 運算順序自左往右,所以1 0 為0,0 5為1。所以表示式的值為1。根據運算子表,是從左往右結合的。先看1 0是假,返回0。原式就變成 0 5,是真,返回1 所以結果就是 1。值是1,1 0為假 值為0 0 5為真 值為1 c語言 表示式1 0 5的值是 是1。根據c語言運算規則,檢查左...