c語言 逗號表示式 的問題,一個C語言 逗號表示式 的問題

2022-02-16 22:46:57 字數 5598 閱讀 5017

1樓:

printf("%d\n",a=3*a,4*a);

這個裡面的不是逗號表示式,是printf 函式的引數printf("%d\n",(a=3*a,4*a));

(a=3*a,4*a) 這個是個逗號表示式,最終表示式的值將作為 printf 函式的引數,就是先計算出逗號表示式的值,再輸出值 (a=3*a,4*a) 這裡的括號改成英文的,就正確了

2樓:

小弟這個不是括號的問題

如果要作為 printf 的非指標引數,必須取地址,才能正常 printf 變數的值

上面的圓括表示式號 ( a = 3 * a, 4 * a ) 返回變數 a 本身

a 並不是一個指標型的引數,所以 printf 函式出錯了你可以試試下面語句:

int a = 0;

printf( "%d", &a );

printf( "%d", a );

看看哪個 printf 會成功

3樓:匿名使用者

第一個程式:因為你的輸出格式中只有一個%d,所以只對應a=3×a,所以輸出3;第二個程式:我執行沒有錯誤(你的括號是中文的,要改為英文的括號),輸出12,括號中是一個逗號表示式,先從左往右計算,最後表示式的值是最後一個逗號後面的值,也就是先計算a=3×a,這時a還是3,然後a×4得到12~

4樓:

第一個:並連情況下,只能執行第一個分號的**

第二個:這不能同時執行的,你用(),強制執行肯定出錯啦

5樓:匿名使用者

printf("%d\n",a=3*a,4*a); 這個不是逗號表示式。是printf函式輸出。輸出是由左到右逐個替換。

printf("%d\n",(a=3*a,4*a)); 這裡你的()輸出有全形的。如果你的程式裡不是這樣。那在vc6.

0中的sdk 版本較老不支援逗號表示式。不知道turbo c需要更新什麼.

c語言逗號表示式的一個問題?

6樓:匿名使用者

c=(a-=a-3),(a=b,b 3)。前後是兩個逗號表示式,記住賦值運算的優先順序高於逗號運算子的,所以c=3,a =b會 將a 所在空間的值改變,所以,a =0,在整個過程中b 的值並沒有改變。結果為,0,0,3

7樓:匿名使用者

應該是後面的才算,前面的只是作運算賦值給c

c語言逗號表示式的問題

8樓:匿名使用者

逗號運算子的優先順序是15級,左結合,其作用是用逗號將兩個表示式連線起來。

逗號運算子的一般形式是:表示式1,表示式2

逗號運算子的求解過程是:先邱表示式1,再求表示式2,整個表示式的值是表示式2的值。

你上面的列子是正確的,因為逗號運算子的優先順序要低於賦值運算子。

y=(x=a+b),(b+c);解釋如下

先算x=a+b得x=6,然後把x的值賦給了y,得y=6,接著運算b+c

如果把y=(x=a+b),(b+c);改成y=((x=a+b),(b+c));那麼x=6,y=10.

明白了吧?呵呵,我查過書的哦!!

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使用靈活,適應性強

9樓:匿名使用者

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

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

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

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

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

10樓:匿名使用者

樓上說的可能自己也沒有理解清楚

給你個例子

y=4,5;這個y會等於4

y=(4,5);這個時候y=5

知道第二個為什麼等於5嗎?

簡單的說,括號優先順序高,括號裡面先算4,然後算5把5賦值給y,其實這個裡面的逗號也沒什麼運算,也就是分割而已.

......................................

/// 下面回答樓主

y的值應該是等於x的值

第一步 括號的優先順序是最高的,所以先運算括號裡面,

然後括號裡面完了後賦值給y 也就是x賦值給y

然後是逗號後面的b+c當然是空計算 ,沒有賦值給任何變數

你可能不知道逗號是幹什麼的吧,其實逗號是分割作用的,

逗號左邊和右邊是沒關係的.

你看看你上面的定義就知道了 你上面是這樣的int a=2,b=4,c=6,x,y;

你想想,如果按照你說的邏輯的話,那麼y賦值是(b+c)的話,那你的int a=2,b=4,c=6,x,y這句話的a又等於什麼值???

那不就變成了所有的變數的值都等於最後一個y了不是嗎,呵呵

所以逗號僅僅分割作用,不參加逗號左邊和右邊的計算.

11樓:匿名使用者

是你看的那個電子書表述有誤,逗號運算子優先順序特別低,當然也比賦值運算子=低,問題中的表示式求值順序是:

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

4. 6,10最後得到逗號表示式的值為10顯然電子書說的y等於整個逗號表示式的值是錯的,執行結果也說明了這一點

12樓:匿名使用者

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

看來樓主是沒搞懂這個:

a=2,b=3,c,d;

a+b,b+1; 沒有賦值的語句,裡面的表示式的最後一個的值是語句的值

c=a+b,b+1; c的值是什麼是a+bc=(a+b),b+1; c的值是a+bc=(a+b,b+1); c的值才是b+1

13樓:馬蕾鹿妙

逗號表示式的運算級最低,比賦值運算子級別還低。

所以y=(x=a+b),(b+c);

先算x=a+b=6,再y=x=6;而後面的b+c不影響x和y的值。

所以最終x,y的值都是6.

只不過y=(x=a+b),(b+c);這整個式子的值是b+c=10而已。

如果是y=((x=a+b),(b+c));

那麼才結果是x=6,y=b+c=10

14樓:弭昊學翊

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

逗號表示式,每個子表示式都會執行,整個表示式的結果是最後的子表示式的結果

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

你可以測試下

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

檢視結果會是什麼

自己多實踐

15樓:司彩皇甫仙媛

那執行順序

等價下面的複合語句:

printf("%d,%d,%d",

a,b,c);

//結果:0,0,3

逗號表示式

的值等於此表示式的最後一個表示式的值:v

=(exp1..,expn);//順序執行從exp1到expn,然後此表示式的值expn賦給v,當然你既知道表示式是可以包含表示式的,就別暈了^

^非常簡單:var=((a),

(c,d));//順序:a→(c→d)→(var=d)

16樓:明月隱丹心

激動成這樣,至於嗎?

你不會看優先順序嗎,逗號優先順序是最低的,肯定是先給y賦值,在計算後面的。我也有他的教材,我怎麼沒看到這個。

c語言逗號表示式問題

17樓:匿名使用者

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

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

a+7=6+7=13

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

18樓:擁雲莊主

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

實際執行結果:

19樓:匿名使用者

表達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!

關於c語言for語句初始化表示式裡的逗號

你的判斷 條件不對 你的判斷條件是賦值語句,把1賦給k,一直成立,所以一直迴圈不會退出,然版後k 然後救權死迴圈了。裡面的逗號是逗號表示式,逗號表示式就是,逗號的前後面的表示式都會執行一次。在進for迴圈時,會先將i 0,在k 1.其中判斷條件k 1是賦值,不是判斷,也就說每次判斷條件是否成立的時候...

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

是1。根據c語言運算規則,檢查左運算元的值是否小於右運算元的值,如果是則條件為真。1 0 5是先執行1 0 false 結果為0,再執行0 5 true 因此結果為1。如下 表示式的值為1 根據運算子表,是從左往右結合的。先看1 0是假,返回0。原式就變成 0 5,是真,返回1 所以結果就是 1。擴...

C語言逗號表示式 a 3 5,a 4,a 5 的值是多少

a 3 5,a 4 a 5 應該是 a 3 5,a 4 a 5 吧 逗號表示式注意兩個基本知識 1.逗號表示式的運算順序是從左向右運算 2.逗號表示式的值取逗號中最右表示式的值 現在看 a 3 5,a 4 a 5這個逗號表示式,首先對於 a 3 5,a 4 和a 5來說,按照從左向右運算先計算 a ...