S SmartDocs

编程语言

Python、C、C++、Java、JavaScript、TypeScript、Go、R 与 Haskell 教程,从入门语法到高级技巧。

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 程式碼。

阅读文章 →
C Programming Language 更新于 2026-08-02

練習題與詳解 — 並行程式設計

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

阅读文章 →
C Programming Language 更新于 2026-08-02

並行程式設計(Concurrency with pthreads)

多核心時代,讓程式「同時做多件事」是效能的必經之路——但也打開了一整類 全新的 bug:race condition、死鎖、資料撕裂。這些 bug 不確定性重現、 難以除錯,因此並行程式設計的重點不是「會開執行緒」,而是正確共享資料。 本單元用 POSIX pthreads(macOS/Linux 通用)從零建立:執行緒生命週期、 互斥鎖、條件變數與生產者-消費者模式。K&R 成書於單核年代,本單元為現代補充。

阅读文章 →
C Programming Language 更新于 2026-08-02

練習題與詳解 — 未定義行為與除錯工具

本檔收錄 6 題由易到難的練習,全部採「找出並修正 bug」形式: 題目給含 bug 的程式碼,你要用本單元的工具(警告、lldb、Sanitizers、 leaks、assert)把蟲抓出來修好。exercises/ 內是修正版:

阅读文章 →
C Programming Language 更新于 2026-08-02

未定義行為與除錯工具(UB & Debugging Tools)

C 給你效能與自由,代價是:寫錯時它不會保護你。未定義行為(Undefined Behavior, UB) 是 C 最危險的概念——程式可能 crash、可能默默算錯、也可能「看起來正常」直到換編譯器。 本單元建立兩件事:一份常見 UB 目錄(知道地雷在哪),與一套現代除錯工具鏈 (編譯警告、lldb/gdb、Sanitizers、assert、printf 除錯),把地雷變成可以系統化排除的問題。

阅读文章 →
C Programming Language 更新于 2026-08-02

C 程式語言完整教程(初階 → 中階 → 高階)

本教程以 K&R 經典教材《The C Programming Language, 2nd Edition》(Kernighan & Ritchie)為主軸, 並補充現代 C 標準(C99 / C11 / C17 / C23)、資料結構、系統程式設計、多執行緒與除錯工具等主題, 帶你從零基礎一路走到進階系統程式設計。

阅读文章 →
C++ 更新于 2026-07-21

題目說明

本期末專題要求使用 DeviceAlpha 開發板撰寫一支 C 程式,模擬一套可運作的家庭保全系統(Home Security System)。專題整合按鈕(PB1–PB4)、LED 指示燈、蜂鳴器、溫度感測器與七段顯示器,展示真實嵌入式系統的核心原理。程式運作流程規定如下:

阅读文章 →
C++ 更新于 2026-07-21

題目說明

本實驗要求撰寫一支 C 程式,透過 Device Alpha 實驗板(LED、蜂鳴器、加熱器、溫度感測器、七段顯示器、按鈕)完成一個「多次溫度讀取並計算平均值」的流程。題目的完整要求如下:

阅读文章 →
C++ 更新于 2026-08-03

Ch07 — Lambda 函式(Lambda Functions)

Lambda 是「寫在表達式裡的匿名函式」。它讓你把一小段邏輯就地定義、就地使用,不必為了三行程式碼特地跑到別處寫一個具名函式。 > > 在 Ch04 我們學會了函式,在 Ch06 認識了函式指標。Lambda 是這條路的自然延伸:它比函式指標更強大(可以「帶著狀態」),比具名函式更輕便(不必命名、不必宣告),是現代 C++ 中使用頻率極高的語言特性。

阅读文章 →
C++ 更新于 2026-06-15

Ch01:認識 C++ 與開發環境

讀完本章後,你應該能夠:: 了解 C++ 語言的歷史、設計哲學與特色 清楚說明程式的編譯流程(前置處理 → 編譯 → 組譯 → 連結) 安裝並設定 C++ 開發環境(g++ / clang++ / IDE) 熟悉常用的編譯器旗標(-std、-Wall、-Wextra、-g、-O2) 理解 Debug 與 Release 兩種建置模式的差異 撰寫、編譯並執行你的第一個 C++ 程式 看得懂編譯器錯誤訊息並加以修正 認識 C++ 程式的基本

阅读文章 →
C++ 更新于 2026-07-29

Ch02:變數與資料型別

讀完本章後,你應該能夠:: 學會宣告與初始化變數,理解四種初始化形式的差異 認識 C++ 的基本資料型別(整數、浮點數、字元、布林) 理解固定寬度整數型別(<cstdint>)與何時該用它們 搞懂 signed / unsigned 的差別與常見陷阱 了解浮點數的 IEEE 754 表示法,以及為什麼 0.1 + 0.2 != 0.3 掌握型別轉換規則(整數提升、一般算術轉換)與四種 cast 認識位元運算子(&、|、^、~、<<、>>

阅读文章 →
C++ 更新于 2026-06-15

Ch03:控制流程

讀完本章後,你應該能夠:: 掌握條件判斷:if / else if / else,以及 C++17 的 if 初始化語句 熟練三元(條件)運算子,理解它與 if 的取捨 學會多路分支:switch / case,理解穿透與 [[fallthrough]] 理解邏輯運算子的短路求值及其實際用途 熟悉迴圈結構:for、while、do-while、範圍 for 用範圍 for 搭配結構化綁定遍歷 map 等容器 了解 break、conti

阅读文章 →
C++ 更新于 2026-06-15

Ch04 — 函式(Functions)

函式是程式的基本建構單元。將重複的邏輯封裝成函式,可以提高程式碼的可讀性、可維護性和重用性。 > > 一支好的程式不是「一大段做很多事的程式碼」,而是「許多各司其職的小函式互相合作」。學會切分函式,是從「會寫程式」邁向「會設計程式」的第一步。

阅读文章 →
C++ 更新于 2026-06-15

Ch05 — 陣列與字串(Arrays & Strings)

陣列是存放同型別元素的連續記憶體區塊;字串則是用來處理文字的基本工具。C++ 同時支援 C 風格陣列 / 字串以及更安全的 std::array / std::string。 > > 理解「陣列在記憶體裡是怎麼擺的」,是理解後續指標、字串、資料結構的關鍵。本章會大量使用記憶體示意圖。

阅读文章 →
C++ 更新于 2026-07-27

Ch06 — 指標與參考(Pointers & References)

指標和參考是 C++ 最重要也最容易混淆的概念之一。理解它們是掌握動態記憶體管理、多型、資料結構的基礎。 > > 建議授課時數:2 小時(含 10 分鐘休息)

阅读文章 →
C++ 更新于 2026-06-15

Ch07:結構體與列舉(Struct & Enum)

讀完本章後,你應該能夠:: 理解 struct 的定義方式、用途與背後的設計動機 掌握結構體的多種初始化方式(聚合初始化、C++20 指定初始化器) 了解結構體的記憶體佈局、對齊(alignment)與填充(padding) 學會巢狀結構體、結構體陣列與成員函式 認識 POD / trivial type 的概念 精確分辨 struct 與 class 的差異(語法 vs 慣例) 深入理解傳統列舉 enum 與限域列舉 enum cla

阅读文章 →
C++ 更新于 2026-08-31

Ch08:類別與物件(Class & Object)

讀完本章後,你應該能夠:: 理解類別(class)與結構體(struct)的差異,以及「物件」的本質 說明封裝(encapsulation)的哲學與實際好處 掌握存取修飾詞:public、private、protected 定義成員變數與成員函式,並理解 const 成員函式為何重要 深入理解 this 指標的用途與機制 學會使用 static 成員變數與成員函式(共享狀態) 理解類別不變式(invariant)的概念,並用它指導 ge

阅读文章 →
C++ 更新于 2026-06-15

Ch09:建構子與解構子(Constructor & Destructor)

讀完本章後,你應該能夠:: 理解各種建構子的種類與用法(預設、帶參數、委託、轉換、explicit) 掌握成員初始化列表的語法、初始化順序與「為何優先於賦值」 理解解構子的角色與解構順序 掌握拷貝建構子與拷貝賦值運算子,分辨深拷貝 vs 淺拷貝 深入理解 Rule of Three / Five / Zero 理解 RAII 哲學,並知道它為何是 C++ 資源管理的基石 學會使用 = default 與 = delete 對移動語意有初

阅读文章 →
C++ 更新于 2026-08-16

Ch10 — 繼承與多型

物件導向三大支柱之二:繼承 (Inheritance) 與 多型 (Polymorphism)。 > 繼承讓我們在既有類別的基礎上擴充功能;多型讓同一介面對不同型別產生不同行為。 > 這兩個機制是 C++ 設計大型可擴充系統的核心,但也是初學者最容易誤用的地方。

阅读文章 →
C++ 更新于 2026-08-28

Ch11 — 運算子多載

運算子多載 (Operator Overloading) 讓自定義型別也能使用 +、-、<<、[] 等運算子, > 使程式碼更直覺、更貼近數學或自然語言。 > 它本質上只是「換個語法的函式呼叫」——a + b 其實就是呼叫 operator+(a, b)。

阅读文章 →
C++ 更新于 2026-06-15

Ch12:模板程式設計

讀完本章後,你應該能夠:: 說明 為什麼需要模板,並比較模板與「複製貼上多份程式碼」、巨集(macro)、void* 三種泛型手段的優劣 撰寫 函式模板,理解 模板引數推導(template argument deduction) 的規則與限制 使用 明確模板引數、多型別參數、非型別模板參數(NTTP) 撰寫 類別模板,並能把成員函式定義在類別外 區分並實作 完整特化(full specialization) 與 部分特化(partia

阅读文章 →