#include
int main(void) {
int ten = 10;
int two = 2;
printf("ten = %d, two = %d\n", ten, two);
printf("ten + two = %d\n", ten + two);
return 0;
}
核心概念:聲明 (告知編譯器類型與名字) + 初始化 (賦予初始值)。
const 修飾變量、#define 宏)。| 標準 | 關鍵字 | 說明 |
|---|---|---|
| K&R C | int, long, short, unsigned, char, float, double | 7 大基礎類型 |
| C90 | signed, void | 明確有符號、空類型 |
| C99 | _Bool, _Complex, _Imaginary | 布爾、複數、虛數 (配合 <complex.h>) |
1230173 (前導 0)0x7B (前導 0x/0X)存儲本質:無論寫法,內存中均為二進制補碼編碼。
%d / %i:有符號十進制%o:八進制 (不帶前導 0)%x / %X:十六進制 (小寫/大寫)%#o, %#x, %#X:帶前導 0, 0x, 0X| 類型 | 典型大小 | 範圍 (32位系統) | 格式符 | 用途 |
|---|---|---|---|---|
short / short int | 2 bytes | -32,768 ~ 32,767 | %hd | 節省空間、硬件寄存器映射 |
int | 4 bytes | -2,147,483,648 ~ 2,147,483,647 | %d | 默認整型、最自然大小 |
long / long int | 4/8 bytes | 至少 32 位 | %ld | 較大整數 |
long long (C99) | 8 bytes | 至少 64 位 | %lld | 超大整數 |
unsigned 系列 | 同對應有符號 | 0 ~ 2N-1 | %u, %lu, %llu | 非負、位運算、容器大小 |
fflush(stdout) 強制刷新輸出;無標準函數刷新輸入緩衝區 (C 標準不保證 fflush(stdin) 行為)。char'A' (字符常量) = 整數 65;"A" (字符串) = 指向含 'A','\0' 數組的指標。signed char / unsigned char 明確指定。<limits.h> 中 CHAR_MIN, CHAR_MAX 查看範圍。-1.56E+12, 2.87e-3 (大小寫 e 均可)。0xA.1Fp10 = (10 + 1/16 + 15/256) * 2^10 = 10364.0。| 類型 | 典型大小 | 有效位數 | 範圍約略 | 格式符 |
|---|---|---|---|---|
float | 4 bytes | 6~7 位 | ±3.4e38 | %f, %e, %g |
double | 8 bytes | 15~16 位 | ±1.7e308 | %lf, %le, %lg |
long double | 10/12/16 bytes | 19+ 位 | 更大 | %Lf |
默認提升:float 參數傳遞給無原型函數 (如 printf) 自動提升為 double。
sizeof 運算符size_t)。sizeof(int) = 4;sizeof 3.14 = 8 (double 字面量)。sizeof(char) == 1,但 1 字節不一定是 8 位 (DSP 可能 16/32 位)。(type)expr,慎用,可能丟失精度/符號。int i = 3.14; 截斷小數;char c = 300; 溢出。<stdint.h> 固定寬度類型:int32_t, uint64_t, intptr_t 提升可移植性。fabs(a - b) < epsilon,絕不直接 ==。