1樓:台晚竹書妝
是的,賦值運算的優先順序高於逗號運算子,所以先計算y=(x=a+b),再計算(b+c),整個逗號表示式y=(x=a+b),(b+c)
的值為b+c
,然而並沒有卵用(沒有賦值)。故
最後y=x=a+b
2樓:梁蘭英邰乙
你的理解是正確的。
我估計是
程式漏了一對
小括號:y=(
(x=a+b),(b+c)
);意思是把逗號
表示式的
值賦給y
這樣就有用
了。否則,
就是烤烤人了。
3樓:賴建設厲子
你的問題似乎寫錯了個地方,應該是a=(
b,c--,d+3)吧,這個是《逗號運算子和表示式》那一節的,「逗號運算子按照從左到右依次運算,整個逗號表示式的值是最右邊那個表示式的值」。
括號裡面就是乙個逗號表示式,a取逗號表示式的值。所以答案是a=8.
很專業的哦,給採納哈。
4樓:虎頭幫主
2-4 c基礎知識 3逗號運算子
5樓:練黎天文康
inta=3,b=4,c=5;
c=(a+=a-=a),//這裡是分開兩句話的(b=a,c+2);
a+=a-=a這個是從右往左執行
a-=a
a=0a+=a
a=0c=a
c=0所以c=0
b=ab=0
c+2c不變
不是的是要括號括上才取最後乙個
比如c=((a+=a-=a),(b=a,c+2));
這樣才是取後面的
c語言中逗號運算子怎麼用?
6樓:匿名使用者
一、用法:
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.
邏輯運算最後計算。
7樓:次次次蛋黃公尺亞
在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;
8樓:天雲一號
逗號運算子( , )是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
9樓:匿名使用者
2樓說的很詳細了 ,逗號運算子
的作用是將若干表示式連線起來。它的優先級別在所有運算子中是最低的,結合方向是"自左至右"的。其值是最後乙個表示式的,其間所有的都要計算,你所說的 a=12+(s+2,d+4); 先算s+2.
的4,然後算d+4,最後逗號表達是式的值是d+4=7,整個表示式的值是12+7=19,
10樓:匿名使用者
回答zw791:
括號運算子的結果是取括號內最右邊表示式的結果.
d+4=7,12+7=19
11樓:匿名使用者
2-4 c基礎知識 3逗號運算子
12樓:匿名使用者
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使用靈活,適應性強。在後面幾章中將會進一步看到這一點。
13樓:匿名使用者
一、逗號運算子的特性及作用
逗號運算子的作用是將若干表示式連線起來。它的優先級別在所有運算子中是最低的,結合方向是"自左至右"的。
如:3*3,4*4
二、逗號表示式
逗號表示式的一般形式是:表示式1,表示式2,表示式3……表示式n
逗號表示式的求解過程是:先計算表示式1的值,再計算表示式2的值,……一直計算到表示式n的值。最後整個逗號表示式的值是表示式n的值。
看下面幾個例子:
x=8*2,x*4 /*整個表示式的值為64,x的值為16*/
(x=8*2,x*4),x*2 /*整個表示式的值為128,x的值為16*/
x=(z=5,5*2) /*整個表示式為賦值表示式,它的值為10,z的值為5*/
x=z=5,5*2 /*整個表示式為逗號表示式,它的值為10,x和z的值都為5*/
逗號表示式用的地方不太多,一般情況是在給迴圈變數賦初值時才用得到。所以程式中並不是所有的逗號都要看成逗號運算子,尤其是在函式呼叫時,各個引數是用逗號隔開的,這時逗號就不是逗號運算子。
如:printf("%d,%d,%d",x,y,z);
14樓:匿名使用者
為什麼算完以後a=19?
15樓:匿名使用者
逗號不是運算子```一般是宣告多個變數中間的間隔 比如 int a,b=3,c=4;
c語言運算子
16樓:百度文庫精選
內容來自使用者:wjian178
e68a84e8a2ad62616964757a686964616f31333433646432 1級優先順序(左結合)
() 圓括號;下標運算子;->指向結構體成員運算子;. 結構體成員運算子。
2級優先順序(右結合)
!邏輯非運算子;~按位取反運算子;++字首增量運算子;--字首減量運算子;+正號運算子;-負號運算子;(型別)型別轉換運算子;*指標運算子;&位址運算子;sizeof長度運算子。
3級優先順序(左結合)
*乘法運算子;/除法運算子;%取餘運算子。
4級優先順序(左結合)
+加法運算子;-減法運算子。
5級優先順序(左結合)
<>右移運算子。
6級優先順序(左結合)
<、、>=關係運算子。
7級優先順序(左結合)
==等於運算子;!=不等於運算子。
8級優先順序(左結合)
&按位與運算子。
9級優先順序(左結合)
^按位異或運算子。
10級優先順序(左結合)
|按位或運算子。
11級優先順序(左結合)
&&邏輯與運算子。
12級優先順序(左結合)
||邏輯或運算子。
13級優先順序(右結合)
? :條件運算子。
14級優先順序(右結合)
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <>=賦值運算子。
15級優先順序(左結合)
,逗號運算子。 運算。c語言運算子中有不少為右結合性,應注意區別,以避免理解錯誤。運算子優先順序等級口訣及注釋運算子應用舉例
是什麼運算子,c語言中運算子「 」的作用是什麼?
百分號 是 求餘運算10 3 1 10 3 3 1 算術運算 arithmetic operators 符號,就是用來處理四則運算的符號,這是最簡單,也最常用的符號,尤其是數字的處理,幾乎都會使用到算術運算符號。算術運算子 含義 示例 1 加號 加法運算 3 3 2 減號 減法運算 3 1 負 1 ...
c語言中各個運算子代表什麼?就是啥的
a 表示a加1 a 表示a減1 a b 表示a和b相等,用在條件判斷裡,比如 if a b 如果a等於b,就執行裡的內容 下面按優先順序列出了常用的每個運算子的名稱,如果還有需要具體化的請提問 1級 左結合 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子。2級 右結合 邏輯非運算子 按位...
c語言的運算子都是什麼
按優先順序排序,空行表示優先順序下降,01為最高,最先算14 31均為雙目,左結合。01 圓括號。02 下標。03 指標型結構成員。04 結構成員。05 邏輯非。06 位非。07 自增。08 自減。09 取負。型別 10 型別轉換。11 取內容。12 取位址。sizeof 13 求位元組。此級 5 ...
什麼是指標運算子,c語言 指標運算子和指標說明符有什麼區別
指標運算子是 c c 中的說法。在c c 中有兩個關於指標的運算子 運算子 取位址運算子,m即是變數m在記憶體中的實際位址。運算子 指標運算子 通常稱為間接引用運算子 indirection operator或復引用運算子 dereferencing operator 它返回其運算元 即乙個指標 所...
C語言自增運算,c語言邏輯運算子與自增自減運算子的雜糅運算
是自增運算子,k或k 都是讓變數k的值加1 是自減運算子,k或k 都是讓變數k減1。運算子位於運算元之前,稱為前置運算子 運算子位於運算元之後,稱為後置運算子。這兩種運算子的差異是 前置運算子是對變數先遞增 遞減 然後參與其他運算,即先改變變數的值後使用 後置運算子則是變數先參與其他運算,後對變數遞...