S SmartDocs

프로그래밍 언어

Python, C, C++, Java, JavaScript, TypeScript, Go, R, Haskell 튜토리얼 — 기초 문법부터 고급 기법까지.

C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 函式指標

本檔收錄 6 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住超過 30 分鐘再看「解題思路」,寫完再對照「參考解答」與「程式碼講解」。 每題的完整程式碼也放在 exercises/ 資料夾,可直接編譯執行:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

函式指標(Function Pointers)

函式指標是 C 語言最強大也最容易令初學者卻步的特性之一。它讓「行為」本身變成可以傳遞、儲存、替換的資料, 是實作回呼(callback)、命令分派(dispatch table)、外掛架構(plugin)與泛型演算法(如 qsort)的基礎。 本單元以 K&R §5.11 的通用排序程式為主軸,完整介紹函式指標的語法與實務應用。

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 複雜宣告

本檔收錄 5 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題的完整程式碼放在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-01

複雜宣告(Complicated Declarations)

C 的宣告語法遵循「宣告模仿使用」(declaration mirrors use)的哲學,優雅但也造就了 char (*(*x[3])())[5] 這種令人望之生畏的天書。本單元教你系統化的解讀方法——右左法則 (也稱 spiral rule 的嚴謹版),並徹底釐清 const 與指標、陣列指標與指標陣列、 函式指標的各種組合。對應 K&R §5.12,該節的 dcl 程式正是為了把宣告翻譯成英文而寫的。

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 命令列引數

本檔收錄 5 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題完整程式碼在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

命令列引數(Command-Line Arguments)

程式與外界溝通最古老、最普遍的介面就是命令列引數。Unix 哲學中「小工具 + 管線」的組合能力, 正建立在每個程式都能透過 argc/argv 接收參數之上。本單元對應 K&R §5.10, 從 echo 範例出發,實作簡易版 grep,並補充現代選項解析(getopt)與環境變數(getenv)。

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 位元運算技巧

本檔收錄 5 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題完整程式碼在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

位元運算技巧(Bitwise Techniques)

位元運算是 C 貼近硬體的招牌能力:驅動程式的暫存器操作、網路協定的欄位打包、 權限旗標、雜湊函式、壓縮與加密,處處都是位元運算。本單元對應 K&R §2.9, 從六個運算子出發,系統整理遮罩、位移、欄位擷取,以及一批面試與實務都常見的位元技巧。

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 可變引數函式

本檔收錄 5 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題完整程式碼在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

可變參數函式(Variadic Functions)

printf 為什麼可以接受任意個數、任意型別的引數?答案是 C 的可變參數機制: <stdarg.h> 提供的 va_list 家族。本單元對應 K&R §7.3 的 minprintf 範例, 帶你親手實作一個迷你 printf,並徹底理解「預設引數提升」這個可變參數最重要的規則。

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 鏈結串列

本檔收錄 6 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題完整程式碼在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-01

鏈結串列(Linked Lists)

陣列的大小固定、中間插入要整批搬移;鏈結串列用「節點 + 指標」換來動態成長與 O(1) 插入。 它是第一個要你同時駕馭 struct、malloc/free 與指標的指標的資料結構, 也是作業系統核心(行程佇列、檔案系統快取)與各種函式庫的基本零件。 本單元對應 K&R §6.5 的自我參考結構概念,完整實作單向與雙向鏈結串列。

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 堆疊與佇列

本檔收錄 5 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題完整程式碼在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

堆疊與佇列(Stacks & Queues)

堆疊(LIFO:後進先出)與佇列(FIFO:先進先出)是最基本的兩種「受限存取」容器: 限制越多、實作越簡單、行為越好推理。函式呼叫、運算式求值、undo 機制靠堆疊; 排程、緩衝、訊息傳遞靠佇列。本單元同時給出「陣列版」與「鏈結版」實作, 並以 K&R §4.3 逆波蘭計算機的概念實作 RPN 求值器。

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 樹

本檔收錄 5 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題完整程式碼在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

樹(Trees)

樹是第一個「遞迴天生合理」的資料結構:每個子樹本身就是一棵樹, 於是插入、搜尋、走訪的程式碼幾乎就是定義本身。二元搜尋樹(BST)把「排序」 內建到結構裡,讓搜尋從 O(n) 降到 O(log n)。本單元對應 K&R §6.5 的單字計數樹 ——K&R 全書最精彩的完整範例之一,並補充四種走訪、樹的釋放與平衡概念。

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 雜湊表

本檔收錄 5 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題完整程式碼在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

雜湊表(Hash Tables)

「給我一個字串,我立刻告訴你對應的值」——平均 O(1) 的查找就是雜湊表的魔法。 編譯器的符號表、shell 的環境變數、Python 的 dict、資料庫的索引快取, 底層都是它。本單元對應 K&R §6.6 的表格查詢(table lookup)範例, 實作 hash/lookup/install/undef 全套,並補充 djb2 雜湊、負載因子與 rehash。

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — UNIX 系統介面

本檔收錄 6 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題完整程式碼在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

UNIX 系統介面(The UNIX System Interface)

printf、fopen 這些標準函式庫的底下是什麼?答案是作業系統的系統呼叫(system call)。 K&R 第 8 章揭開這層面紗:檔案描述子、open/read/write/close、目錄與 inode。 理解這一層,你才真正知道 I/O 的成本從哪來、緩衝為什麼存在、 以及 ls、cat 這些工具是怎麼寫出來的。本單元所有範例皆用 POSIX API, 在 macOS(與 Linux)可直接編譯執行,並且只操作 /tmp

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 儲存配置器

本檔收錄 6 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題完整程式碼在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

儲存配置器(A Storage Allocator, K&R §8.7)

malloc 不是魔法。K&R 全書的壓軸範例(§8.7)用不到一百行實作了一個真正能用的 記憶體配置器,把 union 對齊、指標運算、環狀串列、系統呼叫全部串在一起。 讀懂它,你對「指標到底是什麼」的理解會上一個台階。 本單元完整解析 K&R 配置器,並提供一個可攜版實作:以 static char arena[65536] 靜態陣列取代 sbrk(sbrk 在 macOS 已棄用且會觸發警告), 邏輯與 K&R 原版一致,並示範配

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

練習題與詳解 — 現代 C

本檔收錄 6 題由易到難的練習。建議流程:先蓋住解答自己寫,卡住再看 「解題思路」,寫完對照「參考解答」。每題完整程式碼在 exercises/:

글 읽기 →
C Programming Language 中文 업데이트 2026-08-02

現代 C(Modern C:C99 / C11 / C17 / C23)

K&R 第二版(1988)描述的是 ANSI C(C89/C90)。此後 C 語言經歷了四次重要修訂: C99、C11、C17、C23。好消息是:K&R 教你的一切依然成立;新標準是「增補」而非推翻。 本單元把 K&R 之後的演進一次補齊,讓你讀得懂(也寫得出)現代 C 程式碼。

글 읽기 →