數組
- 定義規則:局部數組不指定長度且無初始化 → 編譯錯誤;全局數組可不指定長度(隱式初始化為 0)。
- 初始化:可僅指定內容
int a[] = {1,2,3},長度自動推導;指定長度時,未初始化元素自動為 0(int a[10] = {0} 全置零)。
- 多維數組:C 僅允許省略第一維
int a[][3],且所有行長度固定(異於 Java 的不規則數組)。
- 字符串:以
\0 結尾的字符數組,sizeof("abc") == 4。
- 越界:C 不檢查下標越界,訪問越界屬未定義行為。
- 參數傳遞:數組退化為指針,形參可寫
void f(int a[]) 或 void f(int *a),多維數組必須給出除第一維外的所有維度。
- 地址本質:數組名即首元素地址,
a == &a[0]。
extern 與多文件共享
外部變量在某文件定義(分配存儲),其他文件用 extern 聲明(不分配存儲)即可訪問。定義分配空間,聲明僅說明屬性。
變量命名規則
同 Java:字母/下滑線開頭,後接字母/數字/下滑線,區分大小寫。ANSI 保證前 31 字符有效。
基本數據類型
| 類型 | 關鍵字 | 最小位寬 | 備註 |
| 字符 | char | 8 | 有符號性由實現定義 |
| 整數 | int | 16 | 通常為機器字長 |
| 短整數 | short (int) | 16 | |
| 長整數 | long (int) | 32 | |
| 單精度 | float | - | |
| 雙精度 | double | - | |
| 長雙精度 | long double | - | |
signed/unsigned 可修飾整型。limits.h/float.h 定義極值常量。標準 C 無 bool,以非 0 為真、0 為假。
整型常量後綴與進制
- 十進制:無後綴 →
int/long/unsigned long(取最小能容納者)。
- 八進制/十六進制:無後綴 →
int/unsigned int/long/unsigned long。
U/u → 無符號;L/l → 長整型;UL → 無符號長整型。
- 字符常量類型為
int;浮點常量默認 double,F/f → float,L/l → long double。
算術類型提升與轉換規則( usual arithmetic conversions )
- 有
long double → 另一操作數轉 long double
- 有
double → 轉 double
- 有
float → 轉 float
- 有
unsigned long → 轉 unsigned long
- 一邊
long,另一邊 unsigned int:若 long 能表示所有 unsigned int 值 → 轉 long,否則雙方轉 unsigned long
- 有
long → 轉 long
- 有
unsigned int → 轉 unsigned int
- 否則 → 雙方轉
int
注意:float 不會自動提升為 double(除非另一操作數為 double)。示例:16 位機上 -1L > 1UL 為真,因 -1L 提升為巨大的無符號長整數。
void 類型
表示「無值」,不能作為左值,不能轉換為非 void 類型。可用 (void)expr 顯式丟棄表達式值。
轉義字符總表
| 轉義 | 含義 |
| \a | 響鈴 |
| \b | 退格 |
| \f | 換頁 |
| \n | 換行 |
| \r | 回車 |
| \t | 水平製表 |
| \v | 垂直製表 |
| \\ | 反斜槓 |
| \? | 問號 |
| \' | 單引號 |
| \" | 雙引號 |
| \ooo | 八進制(1-3位,首位≤3) |
| \xhh | 十六進制(1-2位) |
\0 即空字符(NUL),數值為 0,常用於字符串結束標記。
- 上一篇文章: Objective-C Block 深度解析:語法、捕獲機制與實戰場景
- 下一篇文章: C程序設計語言精華筆記(二):運算符優先級、字符串、存儲類別與標準庫函數
Copyright ©
程式碼之家 All Rights Reserved