sizeof、malloc、strcmp 是執行什麼的 long char float 占幾個字節
sizeof — 編譯期運算符(非函數)size_t)。sizeof(int) — 類型需加括號sizeof a — 變量/表達式可不加括號sizeof arr — 數組名**不退化**,得整個數組大小(區別 sizeof(ptr) 得指針大小)
void func(int arr[10]) { printf("%zu\n", sizeof(arr)); } // 輸出 8 (指針大小),非 40!
int main() { int a[10]; printf("%zu\n", sizeof(a)); func(a); } // 輸出 40
malloc — 動態內存分配函數 (<stdlib.h>)void *malloc(size_t size);size 字節**未初始化**內存,返回起始地址(void*,隱式轉換為任意指針類型)。NULL,**必須檢查**!free(ptr);,釋放後指針置 NULL 防野指針。stdlib.h 導致隱式聲明返回 int 截斷地址(64位崩潰);malloc(strlen(s)) 忘記 +1 存 \0;釋放非堆地址/重複釋放。strcmp — 字符串比較函數 (<string.h>)int strcmp(const char *s1, const char *s2);\0 結尾的字符串。< 0:s1 < s2 (首個不同字符 s1[i] < s2[i])== 0:s1 == s2 (完全相同)> 0:s1 > s2strlen,忽略大小寫用 strcasecmp (POSIX) 或自寫。| 類型 | 典型大小 (字節) | 備註 |
|---|---|---|
char / signed char / unsigned char | 1 | 標準保證 sizeof(char) == 1,CHAR_BIT >= 8 |
short / short int | 2 | 至少 16 位 |
int | 4 | 至少 16 位,通常 32 位 |
long / long int | 4 (Windows 64) / 8 (Linux/macOS 64) | **LP64 vs LLP64 模型差異**!至少 32 位 |
long long | 8 | 至少 64 位 (C99) |
float | 4 | IEEE 754 single precision |
double | 8 | IEEE 754 double precision |
long double | 8/10/16 | 實現相關,x86 常 10 字節 (80位擴展精度) |
指針 void* | 8 (64位) / 4 (32位) | 與地址總線寬度匹配 |
long 和指針 64 位 (8 字節),int 32 位。long long 和指針 64 位,**long 保持 32 位 (4 字節)** 兼容舊代碼。<stdint.h> 精確類型**:int32_t, int64_t, intptr_t 等。
sizeof是編譯期運算符得類型/對象大小,數組名不退化;malloc堆上分配未初始化內存,需檢查 NULL 配對 free;strcmp字典序比較字符串返回負/零/正。基本類型大小依實現:char=1、short=2、int=4、float=4、double=8、long4/8 視 LP64/LLP64、**指針 4/8**,可移植代碼用stdint.h精確類型。
這三個是 C 語言**核心工具鏈**:sizeof 靜態知大小、malloc 動態要空間、strcmp 運行時比字符串。基本類型大小**無統一標準值**,只知道「下限」與「常見實現」,**可移植代碼堅決用 stdint.h**。面試時能說清 long 在 Windows/Linux 差異、sizeof 數組不退化、malloc 必檢 NULL、strcmp 返回值語義,即為扎實基礎。