在 C 語言中,只有在使用時才佔用記憶體單元的變數,其儲存類別是 ( )
A. auto register
B. extern register
C. auto static
D. static register
| 儲存類別 | 記憶體配置時機 | 生命週期 | 備註 |
|---|---|---|---|
| auto (區域預設) | 函數進入時配置於堆疊 | 函數執行期間 | 「使用時才佔用」的典型代表 |
| register | 建議編譯器放入暫存器,**不佔用記憶體位址** | 函數執行期間 | 若暫存器不足退化為 auto,同樣「使用時才佔用」 |
| static (區域靜態) | 程式啟動時配置於資料段 | 整個程式執行期間 | **一直佔用記憶體**,不符合題意 |
| extern / static (全域) | 程式啟動時配置 | 整個程式執行期間 | **一直佔用記憶體** |
static 變數 (選項 C、D) 在程式啟動時即配置記憶體,直到程式結束,**不符合「只有在使用時才佔用」** → 排除 C、D。extern 只是宣告外部連結,實體定義處決定儲存類別,通常為靜態儲存 → 排除 B。auto (區域自動變數) 與 register (暫存器變數) 皆在函數呼叫時配置、返回時釋放,符合題意 → 選 A。register 關鍵字在現代編譯器 (GCC, Clang, MSVC) 中多為提示,編譯器自行決定最佳配置 (暫存器或堆疊),程式設計師不可強制要求。register 變數**無法取址** (&var 編譯錯誤),因為可能不在記憶體中。