賦值表示式的值等於右值

2021-07-22 11:46:58 字數 986 閱讀 8545

我們知道,在c 語言中經常使用 諸如 if(表示式){} ,while (表示式) {} 形式的判斷語句,當表示式為真時執行 {} 中的函式體,但是當表示式為賦值表示式時怎麼判斷該表示式為真還是為假?或者當表示式為逗號表示式式又該怎麼使用?

記住乙個原則:c語言賦值表示式所代表的值就是被賦值變數最終被賦予的值。

以下測試**可以證明以上觀點:

那麼以下**的結果就很好理解了!

1 #include 2

3int main(int argc, const

char *argv)410

//當賦值為非0時賦值表示式代表的邏輯值為真,所以下列語句會執行

11if (i=1

) 14

//當賦值為非0時賦值表示式代表的邏輯值為真,所以下列語句會執行

15if (i=-1

) 18

//逗號表示式代表的邏輯值為最後乙個表示式的邏輯值,所以下列語句不會執行

19if (i=1,i=0

) 22

//逗號表示式代表的邏輯值為最後乙個表示式的邏輯值,所以下列語句會執行

23if (i=0,i=1

) 26

2728

29return0;

30 }

我估計,按賦值表示式的語意,等號的左邊總是「可寫」的,右邊總是「可讀」的。如果賦值表示式的值是左邊的值,那麼程式需要重新計算等號左邊的值才能返回,這帶來兩個問題,一是效能,二是左邊的物件不一定可讀(例如那些可寫但不可讀的屬性)。於是,幾乎所有語言都將「所賦的值」作為賦值語句的返回值,所以連續賦值語句的行為總是「計算最右值一次,從右向左賦值多次」。

但是,對於coffee的解構賦值表示式,情況則有點不同,因為coffee必須將該表示式拆分成兩個,當c是乙個包含***的屬性時,a=b=c 和 b=c;a=c; 並不是等價的。所以,對於解構賦值表示式,等號右邊的表示式實際將會求值多次。

表示式的值

乙個由1到n n 3,4,5.9 的數字組成的遞增序列 1,2,3,4.n。請在數列中插入 表示加法,表示減法,表示連線兩個數 比如1 2 3 就等於1 23 按照這樣的方法將每一對數字組合在一起。計算該表示式是否為0,你寫乙個程式找出所有產生和為零的長度為n的數列。7 1 2 3 4 5 6 7 ...

表示式的值

求乙個包含 四則運算符號和數字的表示式的值,郭煒老師的 講的好好啊。為了自己以後還能反覆看懂學習,我加了一堆備註。include include include includeusing namespace std int factor value 宣告函式 int term value int e...

計算表示式值

試題描述 字尾表示式是指運算子放在兩個運算物件之後,所有計算按運算子出現的順序,嚴格地從左到右進行。注意每個運算元之後都緊跟著乙個 如 3 5 2 7對應的字尾表示式為3.5.2.7.輸入乙個字尾表示式,求表示式的值。注意本題中只出現 三種運算子。輸入一行,乙個字尾表示式。輸出一行,乙個整數,表示字...