在C語言賦值語句中,給多個變數賦值,用逗號隔開,豈不是相當於逗號表示式

2021-04-21 05:14:25 字數 5403 閱讀 4385

1樓:

不能那樣抄理解。逗號表示式

是已經襲宣告bai過的變數合法組成的du

多個有效運算zhi表示式用逗號隔開,dao而int a=1,b=2;只能有一種解釋,那就是宣告和初始化變數時可以把多個相同型別的變數用逗號隔開寫在同一個型別符後面,最後用分號結束。對上面的宣告,如果再宣告一個int c;,那麼,c=(a=1,b=2)運算後c=2,因為(a=1,b=2)取最右邊一個逗號後表示式的運算結果。所以,我覺得c=(a=1,b=2)中的(a=1,b=2)是逗號表示式,而int a=1,b=2不是逗號表示式!

計算機語言的所謂「語法」其實只是一些書寫規定,有很多甚至是不能變通的,比如char *p,*q,語法說*是屬於char而不屬於後面的變數的,但若寫成char *p,q後q卻不認為是指標,這又怎麼理解呢?那就是為了方便,不然,如

char *p,w,x;這樣的宣告就要寫成兩行了:

char *p;

char w,x;……

2樓:匿名使用者

優先順序的抄問題,逗號在運算子中是最低優先順序,所以先進行 = 運算,這樣寫就清除了 (a=1, b=2) 括起來的部分是逗號表示式的值,而a的值為1, b的值為2。同理擴充套件:

int a, b;

a = (1, b) = 2; 相當於 a = b = 2, 執行完後,a, b的值均為2

而 a = (b, 1) = 2, 相當於 a = 1 = 2, 編譯會報錯

3樓:倒黴熊

c語言提供一種特抄殊的運算子——

bai逗號運算子。用它將du兩個表示式連zhi接起來。如:

3+5,6+8

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

表示式1,表示式2

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

也就是說 上面先執行 a=1 也就是給a初始化賦值,然後執行b=2也就是給b初始化賦值

所以,ab都賦值了。

4樓:匿名使用者

為什麼你會這麼理解呢?

其實它相當於

int a=1;

int b=2;

你不要把它想複雜了

c語言for迴圈體內多條語句之間可以用逗號隔開,最後一條後面加分號,代替花括號嗎?

5樓:

如你寫的這樣當然可以,只要你能保證for裡面只有一條語句,就可以省去花花括號。

用逗號運算子來把多條語句合併成一條語句,還真是一個方法。

6樓:典夢凡

c語言不懂,但是一般上花括號是不能省略的,程式設計裡面的括號都是一一對應的,不存在只有一半的情況你前面有{的話,後面某處肯定會有}

7樓:love2012的家

您好,換成新的寫法是可以的,因為c是通過分號來區別下一段**的。但是不建議這樣寫,建議如果有多條語句,最好是放在花括號內。這樣一目瞭然,能夠知道for的迴圈體的開始於結束是在**。

以下是測試結果圖例

8樓:萍水e相逢

樓主說的是用 逗號表示式

應該可以

試一下啊

9樓:艾特

在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,(這是因為賦值運算子比逗號運算子優先順序高)所以最終表示式的值雖然也為8,但a2=3。

而分號代表一句話的結束,從樓主的**含義看,用逗號雖然可以編譯通過,但表達的意思就有問題了

10樓:匿名使用者

不能!!!

{} 是必須的

建議 樓主 除錯一下

c語言逗號表示式問題

11樓:匿名使用者

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

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

a+7=6+7=13

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

12樓:擁雲莊主

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

實際執行結果:

13樓:匿名使用者

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

14樓:匿名使用者

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

15樓:匿名使用者

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

16樓:朱光閎熙華

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

逗號表示式,每個子表

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

du果是最zhi

後的dao子表示式的結果

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

你可以測試下

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

檢視結果會是什麼

自己多實踐

17樓:會飛的小兔子

c語言bai逗號表達

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

逗號表示式用法dao:

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

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

示例:main()

擴充套件資料注意事項

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

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

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

18樓:買蝶歷春

是你看的那個bai電子書

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

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

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

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

19樓:翠**易珍

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

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

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

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

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

20樓:星念之劍宇

第一個三個式子是

a=3*5=15,

a*4,a+5=20

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

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

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

printf的值自然是15

21樓:斐未摩雍

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?

22樓:陶紫雲系南

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

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

23樓:晉凡邗人

你好在printf函式裡

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

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

c語言中什麼是逗號表示式?c=int(a+b)是賦值語句嗎?謝謝

24樓:匿名使用者

c語言提供一種特殊的運算子---逗號運算子,

它將兩式聯接起來,如:3+5,6+8稱為逗號表示式,其求解過程先表達示1,後表達示2,整個表達示值是表達示2的值,

比如:b=4*5,b*10,b*5這個表示式的運算順序是從左到右分別運算。並把所得的結果,傳遞給b。

即,先算b=4*5那麼b=20;然後b*10那麼b=200,然後b*5那麼b的值即為1000,這個語句的功能就是這樣的。

25樓:2021巴扎嘿

只聽說過冒號表示式,加個封號就是了賦值語句了

26樓:風暴黑科技

強制型別轉換

講a+b的型別轉為int

27樓:匿名使用者

轉一個:逗號表示式

c語言提供一種特殊的運算子,逗號運算子,它將兩式聯接起來,如:3+5,6+8稱為逗號表示式,其求解過程先表達示1,後表達示2,整個表達示值是表達示2的值,如:3+5,6+8的值是14。

a=3*5,a*4的值是60

與逗號表示式有關的題

題目:(a = 3,b = 5,b+ = a,c = b* 5)逗號表示式的值...答案:

前兩個表示式只是賦值,從第三個開始計算,b+=a,即b=b+a,即b=5+3,b=8,求最後一個表示式,c=b*5,c=8*5,c=40.因為逗號表示式的值是最後一個表示式的值,所以些表示式的值為40,其他各變數最後的值依次為:a=3,b=8,c=40

c=int(a+b);是賦值語句。將a+b強制轉換成int型,然後賦值給c。

在c語言中怎樣隨機給變數賦值

在c語言 bai中,獲取隨機數的du函式為rand 1 宣告 zhi daoint rand void 2 標頭檔案 stdlib.h 3 功能 獲取一內個隨機數容。4 示例 int a rand 獲取一個隨機數並賦值給a int b rand 100 獲取一個0 99的隨機數,並賦值給b。c語言c...

C語言中可以給指標變數賦值常數嗎

1 申請了空間 在常量區 存放了字串 2 在字串尾加上了 0 3 返回地址,這裡就是返回的地址賦值給了p 字串常量 hello 出現在一個表示式中時,hello 表示式使用的值就是這些字元所儲存的地址 在常量區 而不是這些字元本身。所以,可以把字串賦值給指向字元的指標p,而不能把字串賦值給一個字元陣...

c語言把int變數地址賦給另int變數

p是指標變數,取復p地址制的地址賦值給一個變數bai,用 p,這是對的。du 問題zhi在於用來儲存這個結果的變dao量是什麼型別的,應該是指向指標的指標,int q。int p,q p new int p 30 q p 直接訪問 q是危險的!應該先給q賦值再訪問 q,比如 q new int q ...