修煉內功最強語言,訓練編程思想最有效語言,圣經般存在的語言,2020 TIOBE排行冠軍語言——這些說的,都是C語言。每個優秀開發者都應該精通C語言,這門課程就是為所有沒學過、沒學好C語言的你專屬打造,多種編程語言技術專家bennyhuo獨家分享,帶你系統、高效、輕松啃透C語言這個硬骨頭!5 G0 v+ _6 Y’ V: P??a’ [
〖課程目錄〗:
? ?? ???第1章 課程導學* z, c) I0 |& F, a4 z/ \) N1 u/ s
? ?? ???本章作為課程內容引入,主要介紹課程結構,課程的學習方法等。希望你能通過這門課程徹底掌握程序語言的“道”和“術”。3 r2 d5 Y8 p* v! u5 W7 Y$ _
+ j- h2 j; f$ l
? ?? ?? ?1-1 課前必讀– g. w6 U6 P. N& I+ o% `
? ?? ?? ?1-2 課程介紹與學習指南試看” i2 L* [4 w8 y3 V7 ?1 U
? ?? ???第2章 C語言必備基礎) L! A’ I! q, `: ?2 B
? ?? ???本章主要講解演示編譯環境搭建,IDE配置,調試方法,代碼規范風格等內容,為課程后續內容做足準備工作。: r8 N6 D2 `5 `; s( Z( l
? ?? ?? ?2-1 環境搭建【CLion/MSVC/MinGW】
? ?? ?? ?2-2 HelloWorld【cmake工程結構】) |- E$ Q* B$ M: P$ r$ |” `
? ?? ?? ?2-3 程序調試方法試看$ p4 w. t3 Z) [- b4 B
? ?? ?? ?2-4 C語言的代碼風格【Google C CodeStyle/CLion配置代碼風格】
? ?? ???第3章 C語言快速入門# ^: `! F??d7 P5 V% G
? ?? ???本章核心是對C語言的基本數據類型、變量常量、運算符、分支和循環語句等必備知識進行講解,適合零基礎的同學快速上手,也適合C語言基礎薄弱的同學查缺補漏。
# ]! [1 T2 G” O4 V: ]
? ?? ?? ?3-1 數據類型之int類型【不同系統版本差異】
? ?? ?? ?3-2 數據類型之char類型【常見問題解決】$ _- {0 P0 f; F$ u) J
? ?? ?? ?3-3 數據類型之浮點類型【實際應用技巧】) J+ c8 z; T! I: U: V) J3 S
? ?? ?? ?3-4 變量【內存地址分析】$ R- K) B” L9 L( E& B6 B
? ?? ?? ?3-5 常量【常量修改秘笈】
? ?? ?? ?3-6 運算符-1【易踩坑點】– `! W, V9 e9 j- }
? ?? ?? ?3-7 運算符-2【難點突破】” t$ c( k4 l- y4 f” g
? ?? ?? ?3-8 條件分支語句
? ?? ?? ?3-9 循環語句2 v* l. z& [4 b- W; D; }5 H
? ?? ?? ?3-10 案例:猜數字的游戲+ o’ [! u9 D9 ~- Z??J??u
? ?? ???第4章 函數與程序結構
? ?? ???本章講解C語言中函數的聲明、實現以及使用方法,變量的類型和作用域。本章最后還會為你定制一個經典的漢諾塔的問題來實踐函數的遞歸。相信通過本章的學習,你就可以獨立完成一些基本功能的程序開發了。/ R. C; O2 g( @, u6 }; \
? ?? ?? ?4-1 函數基礎【tips:Google命名規范】# K” L” k: F9 a2 ^
? ?? ?? ?4-2 函數的原型【空參數列表與 C++的區別】; ]. S” d0 E8 J
? ?? ?? ?4-3 變量的類型和作用域【Compiler Explorer查看匯編指令】
? ?? ?? ?4-4 函數的變長參數【對比Java的變長參數】( I/ D, m1 G* q. A4 E
? ?? ?? ?4-5 函數的遞歸【C語言實現斐波那契數列】
? ?? ?? ?4-6 案例:漢諾塔
? ?? ???第5章 預處理和宏9 e7 y2 f6 F??j4 F
? ?? ???本章講解C語言的預處理和宏的使用方法,包括文件包含、條件編譯、宏函數等特性的理解和應用。本章最后會帶你深度對比宏和函數實現一個方便打印輸出的PRINTLNF 宏。‘ A( o’ s5 ^7 v2 t. ]* {” y
8 ?- E” v7 n2 L+ R
? ?? ?? ?5-1 文件包含【領略編譯器宏之以小搏大】
? ?? ?? ?5-2 案例:自定義頭文件
? ?? ?? ?5-3 宏函數
? ?? ?? ?5-4 條件編譯【掌握實際應用場景】) }7 i0 w. B! c, o??B. ^/ ^
? ?? ?? ?5-5 案例:實現 PRINTLNF
? ?? ???第6章 玩轉數組
? ?? ???本章將帶你吃透C語言中的數組,包括數組在內存當中的存儲形式,字符串的基本概念,數組作為函數參數傳遞等內容。本章最后也會帶你就數組元素的排序這一經典問題進行實踐,加深對數組本身的理解。) q- I” n5 P) l. v
? ?? ?? ?6-1 數組基礎【C語言設計哲學】2 `$ ^, m+ }, H- R# A
? ?? ?? ?6-2 數組的邊界‘ G/ I% R( s% a6 \9 {
? ?? ?? ?6-3 字符串
? ?? ?? ?6-4 函數的數組類型參數【C語言極致效率之源】
? ?? ?? ?6-5 二維數組【數組參數的正確使用姿勢】5 t; C. b% G. B. _+ O# x
? ?? ?? ?6-6 案例:打亂數組的順序【各種場景應用】( k- f2 R” }2 n- l8 x8 c
? ?? ?? ?6-7 案例:數組元素的排序【Lomuto分割法】4 j” m* }4 L+ Q$ l??V+ ~2 k
? ?? ???第7章 吃透指針
? ?? ???本章將帶你吃透C語言的指針,包括指針的運算、函數參數傳遞以及返回值的內存復制過程、動態內存分配、函數指針等特性的分析及應用。本章最后還會結合宏和指針深度剖析一個簡單的交換變量值的多種實現方法以及指針版本的快速排序算法的實現。…
? ?? ?? ?7-1 指針基礎【摸清本質帶你愛上指針】
? ?? ?? ?7-2 只讀指針變量與只讀變量指針, `( ]! i’ w; Q% {
? ?? ?? ?7-3 特殊的指針【使用禁忌】1 y$ b% K9 ~+ L+ h0 O
? ?? ?? ?7-4 指針的運算【各式魔法操作】試看
? ?? ?? ?7-5 左值和右值【只需記住這兩點】0 o0 d) j5 W- R% M; _% e9 Z
? ?? ?? ?7-6 指針參數作為返回值【通過匯編了解函數返回值機制】
? ?? ?? ?7-7 動態內存分配【突破面試高頻考點】4 B; _6 H2 ~” t6 T( r+ [* Z??u7 P1 t
? ?? ?? ?7-8 函數指針與typedef6 P2 L1 z+ V/ _# `# m, ]4 f
? ?? ?? ?7-9 案例:交換兩個變量的值
? ?? ?? ?7-10 案例:指針版本的快速排序【Hoare分割法】
? ?? ???第8章 聚合數據類型8 h* \) M8 @2 ]1 h
? ?? ???本章將講解C語言的聚合數據類型,包括結構體、聯合體、枚舉等特性及應用,也重點剖析結構體的內存對齊特性,本章最后會結合前面的知識給出字節序判斷和單鏈表的基本實現的案例。
* z: {% a$ O% G1 N: h2 W* s
? ?? ???第9章 字符串的應用
? ?? ???本章將講解標準庫中對字符串提供的支持,包括窄字符與寬字符相關的字符類型判斷,字符串比較、連接、復制,原始內存的清除、復制、移動等工具函數的應用,以及窄字符與寬字符的轉換函數及編碼設置的方法,最后會對C99新增的restrict、C11新增的安全版本函數做分析。…& J$ T0 c3 T9 g- o5 H, U
” w” ?1 A7 ]* V1 N: v
? ?? ???第10章 時間的應用
? ?? ???本章將講解標準庫中對時間提供的支持,包括計算機軟件當中各類常見的時間概念,獲取系統時間、日歷時間的方法,時間的格式化和解析的方法等,由于各平臺對時間的支持存在一定差異,我們使用條件編譯實現一個跨平臺的毫秒時間戳的獲取函數,為你編寫跨平臺的代碼提供思路。…
/ S- z( z1 ^6 P/ d6 d
? ?? ???第11章 文件的輸入輸出
? ?? ???本章將講解標準庫中對文件輸入輸出的支持,包括文件流的概念,文件流按字符、按行、按字節讀寫函數的使用,并使用多個版本的文件復制的案例貫穿全章,在對比和迭代當中深刻理解不同的讀寫方式之間的差異,加深你對文件流緩沖等概念的理解。…& c+ q; z* m; l0 |
? ?? ???第12章 線程與并發8 c& L! c. e4 J! s
? ?? ???本章將講解C語言標準庫從C11引入的線程以及并發相關知識。線程和并發是開發人員的必備基礎,本章內容除了幫助你在實踐當中更好地了解諸如pthread這樣的線程庫以外,對于其他現代語言的學習也是非常有益的。本章最后綜合所學完成處理復雜的線程返回結果、并發任務執行與函數回調兩個實踐案例。…
) h$ j’ o4 m4 c
? ?? ???第13章 編譯、鏈接和庫$ ]/ }4 q9 B6 i% [3 {8 q$ x” j
? ?? ???本章將基于gcc講解C語言編譯過程中的各個環節和細節,幫助你了解C語言是如何從源碼一步一步編譯成最后的可執行文件,也會講解如何將自己的模塊作為依賴導出,如何使用conan來管理第三方依賴,本章最后還會以C++和Java為例傳授你如何使用其他語言來調用C語言庫。…
3 n2 `??J) k; k’ A9 e
? ?? ???第14章 GUI 編程實踐
? ?? ???本章將講解Linux桌面GUI的主流開發技術GTK+,基于該框架了解如何使用C語言開發 GUI應用,掌握如何實現跨平臺的GUI應用程序開發(支持Windows/macOS/Linux),還將了解使用GTK+開發GUI程序的基本方法,包括如何創建Window,通過css來編輯控件樣式,使用Glade快速完成UI布局等。最后我們將仿照macOS的計算器實現一個功能相對…
/ g7 i0 i5 s$ Q
? ?? ???第15章 綜合案例:桌面跨平臺的下載工具8 H8 N” B9 F5 b
? ?? ???本章作為課程最后的綜合案例,將帶你從零開始開發一個桌面跨平臺的下載工具,包括使用Conan管理依賴,使用GTK+開發UI,使用curl訪問網絡,使用sqlite來存儲任務,使用獨立的線程來承載下載任務等等。本章綜合性較強,我們力求盡可能多地覆蓋課程當中所學的知識,幫助大家進一步加深對C語言的認識和理解,培養使用C語言構建…& y* l3 m+ F7 U* Q# e, l! }
? ?? ???第16章 課程總結
? ?? ???本章作為課程的最后一章,我們將帶你整體梳理課程所學的內容,并提供一些后續的學習建議,在課程問答區老師等著與你進一步交流。