表達式是 C 語言計算與數據流動的基本單元。理解算術表達式構成、賦值表達式的右結合特性、以及不同類型賦值時的自動轉換規則,是寫出正確高效代碼的基石。
由算術運算符(+ - * / %)、括號連接常量、變量、函數調用等構成。示例:
a + b
(a * 2) / c
(x + r) * 8 - (a + b) / 7
++i
sin(x) + sin(y)
(++i) - (j++) + (k--)
包含前綴/後綴自增減、函數調用、括號改變優先級等豐富形式。
=變量 = 表達式
x = a + b
w = sin(a) + sin(b)
y = i++ + --j
功能: 先計算右側表達式值,再賦予左側變量。
a = b = c = 5
// 等價於 a = (b = (c = 5))
// 先 c=5,值為5賦予b,值為5賦予a,最終 a=b=c=5
= 為右結合,這使得鏈式賦值成為可能。
x = (a = 5) + (b = 8) // 合法!a=5 值為5,b=8 值為8,x=13
x = 8; // 賦值語句:表達式加分號
a = b = c = 5; // 賦值語句
C語言將 = 定義為運算符而非語句,使賦值表達式可出現在任何允許表達式的地方,極大增強了表達能力。
當 = 兩側類型不同時,系統自動將右側類型轉為左側類型:
| 右側類型 → 左側類型 | 轉換規則 | 示例 |
|---|---|---|
| 實型 → 整型 | 捨去小數部分 | int a = 8.88; // a=8 |
| 整型 → 實型 | 數值不變,以浮點形式存儲(小數部為0) | float x = 322; // x=322.0 |
| 字符型 → 整型 | ASCII 碼放入低 8 位,高 8 位補 0 | int a = 'k'; // a=107 |
| 整型 → 字符型 | 只取低 8 位 | char c = 322; // c=66 ('B') |
int a, b = 322;
float x, y = 8.88;
char c1 = 'k', c2;
a = y; // 實→整:a=8
x = b; // 整→實:x=322.0
a = c1; // 字符→整:a=107 ('k' ASCII)
c2 = b; // 整→字符:c2=66 (低8位)
printf("%d,%f,%d,%c", a, x, a, c2); // 輸出 8,322.000000,107,B
掌握賦值表達式的右結合性、嵌套用法,以及四類隱式轉換規則,能讓你精準預測混合類型運算結果,避免精度丟失、截斷等難以察覺的 Bug。