産品特色
        編輯推薦
                                    本書會隨書附贈5個多小時充滿激情的視頻,這是一套完整的C語言視頻課程!  
作者Zed A.Shaw為急於自我提高編程技能(不限語言)的C語言初學者構建瞭一套課程,隻要跟著學,你會像迄今為止Zed教過的數百萬程序員一樣獲得成功!隻要你能自律、投入和堅持!  
本書內容十分淺顯易讀,隻要花2天到1周可以讀完,讀完後既可以獲得幾韆行代碼的C編程經驗。本書會讓你的每一分鍾投入都有迴報。你很快能學會世界上強大的編程語言之一,成為一名C程序員。   
在本書中,你將通過完成52個精心設計的習題來學會C語言。閱讀書裏的習題,看作者提供的視頻,照著錄入代碼(不要復製和粘貼!),修正自己的錯誤,觀察程序的運行。在這個過程中,你將會瞭解好的現代C代碼長什麼樣子,如何有效地思考代碼,如何更加有效地找齣和修正錯誤。重要地是,你將掌握嚴密的防禦性編程技術,不管你使用什麼編程語言,利用這些技術你都可以創建避免缺陷並抵禦惡意行為的軟件。本書通過實用的項目,讓你學以緻用,從而對自己新學會的技能更有信心。Zed將教會你編寫齣色的C代碼所需具備的諸多關鍵技能。                 
內容簡介
   這本書的目標是讓讀者掌握足夠的C語言技能,從而可以自己用C語言編寫程序或者修改彆人的C語言代碼,成為一名的程序員。但這並不完全是一本講C語言編程的書,書中還重點介紹防禦性編程。本書以習題的方式引導讀者一步一步學習編程,結構非常簡單,共包括52個習題,每一個習題都重點講解一個重要的主題,多數是以代碼開始,然後解釋代碼的編寫,再運行並測試程序,給齣附加任務。此外,每個習題都配套教學視頻。  
本書是寫給學過編程語言的讀者的,本書有趣、簡單,並且講解方法獨特,讓讀者瞭解眾多C語言的基礎知識和C程序中常見的缺陷,在慢慢增強自己的技術能力的同時,深入瞭解怎樣破壞程序,以及怎樣讓代碼更安全。     
作者簡介
   作者簡介  
澤德 A. 肖(Zed A.Shaw) 是一位狂熱的吉他手、程序員和編程書作傢。他的  
書教會瞭世界各地的上百萬人如何編寫軟件。他的《笨辦法學Python》和《笨辦法學  
Ruby》《》(這兩本書都已齣到第3版)在全球擁有數百萬讀者。他編寫的軟件大大  
小小的企業都在使用。他的文章經常被眾多極客圈的人閱讀和引用。他是一位活  
躍而有趣的作傢,他會讓你大笑,也會讓你思考。   
譯者簡介  
Wang巍巍是一名受軟件和編程的吸引,從硬件測試做到軟件測試,又從軟件測試做到軟件開發的IT從業人員。代碼和翻譯是他的兩大愛好,此外他還喜歡在網上撰寫和翻譯一些不著邊際的話題和文章。如果讀者對書中的內容有疑問,或者發現瞭書中的錯誤,再或者隻是想隨便聊聊,請通過電子郵件(wangweiwei@outlook.com)與他聯係。     
目錄
   目錄   
習題0 準備工作 1  
Linux 1  
Mac OS X 1  
Windows 2  
文本編輯器 2  
習題1 打開塵封的編譯器 4  
代碼詳解 4  
應該看到的結果 5  
如何破壞程序 5  
附加任務 6  
習題2 使用Makefile構建程序 7  
使用make 7  
應該看到的結果 8  
如何破壞程序 9  
附加任務 9  
習題3 格式化打印 10  
應該看到的結果 10  
外部研究 11  
如何破壞程序 11  
附加任務 12  
習題4 使用調試器 13  
GDB小技巧 13  
GDB快速參考 13  
LLDB快速參考 14  
習題5 記憶C語言運算符 15  
如何記憶 15  
運算符列錶 16  
習題6 記憶C語言語法 19  
關鍵字 19  
語法結構 20  
鼓勵的話 23  
告誡的話 24  
習題7 變量和類型 25  
你應該看到的結果 26  
如何破壞程序 27  
附加任務 27  
習題8 if, else-if, else 28  
應該看到的結果 29  
如何破壞程序 29  
附加任務 30  
習題9 while循環和布爾錶達式 31  
應該看到的結果 31  
如何破壞程序 32  
附加任務 32  
習題10 switch語句 33  
應該看到的結果 35  
如何破壞程序 36  
附加任務 36  
習題11 數組和字符串 37  
應該看到的結果 38  
如何破壞程序 39  
附加任務 39  
習題12 數組和大小 41  
應該看到的結果 42  
如何破壞程序 43  
附加任務 43  
習題13 for循環和字符串數組 44  
應該看到的結果 45  
理解字符串數組 46  
如何破壞程序 46  
附加任務 46  
習題14 編寫和使用函數 47  
應該看到的結果 48  
如何破壞程序 49  
附加任務 49  
習題15 指針,可怕的指針 50  
應該看到的結果 52  
解釋指針 53  
指針的實際應用 54  
指針詞匯錶 54  
指針不是數組 54  
如何破壞程序 55  
附加任務 55  
習題16 結構體和指嚮結構體的指針 56  
應該看到的結果 59  
什麼是結構體 59  
如何破壞程序 60  
附加任務 60  
習題17 內存分配:堆和棧 61  
應該看到的結果 67  
堆分配和棧分配的區彆 67  
如何破壞程序 68  
附加任務 69  
習題18 指嚮函數的指針 70  
應該看到的結果 74  
如何破壞程序 74  
附加任務 75  
習題19 Zed的強悍的調試宏 76  
C語言錯誤處理的問題 76  
調試宏 77  
使用dbg.h 79  
應該看到的結果 82  
CPP如何擴展宏 82  
附加任務 84  
習題20 調試技巧 85  
調試打印和GDB 85  
調試策略 86  
附加任務 87  
習題21 數據類型與流程控製 88  
可用數據類型 88  
類型修飾符 88  
類型限定符 89  
類型轉換 89  
類型大小 89  
可用運算符 91  
數學運算符 92  
數據運算符 92  
邏輯運算符 92  
位運算符 93  
布爾運算符 93  
賦值運算符 93  
可用的控製結構 94  
附加任務 94  
習題22 棧、作用域和全局變量 95  
ex22.c和ex22.h 95  
ex22_main.c 97  
應該看到的結果 99  
作用域、棧和bug 100  
如何破壞程序 101  
附加任務 101  
習題23 達夫設備 102  
應該看到的結果 105  
謎底 105  
何必呢 106  
附加任務 106  
習題24 輸入、輸齣、文件 107  
應該看到的結果 109  
如何破壞程序 110  
I/O函數 110  
附加任務 111  
習題25 變參函數 112  
應該看到的結果 116  
如何破壞程序 116  
附加任務 116  
習題26 logfind項目 117  
logfind的需求 117  
習題27 創造性與防禦性編程 118  
創造性程序員思維模式 118  
防禦性程序員思維模式 119  
防禦性編程的八個策略 119  
應用八大策略 120  
信任輸入 120  
預防錯誤 122  
盡早齣錯,公開齣錯 123  
記錄假設 124  
預防優先,文檔其次 124  
自動化一切 125  
簡潔明瞭 125  
質疑 126  
次序不重要 126  
附加任務 127  
習題28 Makefile中級課程 128  
基本項目結構 128  
Makefile 129  
開頭 130  
構建目標 131  
單元測試 132  
清理 133  
安裝 133  
檢查工具 134  
應該看到的結果 134  
附加任務 135  
習題29 庫和鏈接 136  
動態加載共享庫 137  
應該看到的結果 139  
如何破壞程序 140  
附加任務 141  
習題30 自動化測試 142  
為測試框架連綫 143  
附加任務 147  
習題31 常見未定義行為 148  
重要的20個未定義行為 149  
常見的未定義行為 149  
習題32 雙鏈錶 153  
什麼是數據結構 153  
創建庫 153  
雙鏈錶 154  
定義 155  
實現 156  
測試 160  
應該看到的結果 162  
如何改進程序 163  
附加任務 163  
習題33 鏈錶算法 164  
冒泡排序和歸並排序 164  
單元測試 165  
實現 167  
應該看到的結果 170  
如何改進程序 170  
附加任務 171  
習題34 動態數組 172  
優勢和劣勢 180  
如何改進程序 180  
附加任務 181  
習題35 排序和搜索 182  
基數排序和二分搜索 185  
C語言的聯閤體 186  
實現 188  
RadixMap_find與二分搜索 194  
RadixMap_sort和radix_sort 194  
如何改進程序 195  
附加任務 196  
習題36 更安全的字符串 197  
為什麼C語言的字符串糟透瞭 197  
使用bstrlib 198  
學習庫 199  
習題37 散列錶 201  
單元測試 208  
如何改進程序 211  
附加任務 211  
習題38 散列錶算法 213  
應該看到的結果 218  
如何破壞程序 219  
附加任務 220  
習題39 字符串算法 221  
應該看到的結果 228  
分析結果 230  
附加任務 231  
習題40 二叉搜索樹 232  
如何改進程序 245  
附加任務 245  
習題41 devpkg項目 246  
devpkg是什麼 246  
我們要實現的東西 246  
設計 247  
Apache Portable Runtime 247  
項目布局 248  
其他依賴 249  
Makefile文件 249  
源代碼文件 250  
DB函數 251  
shell函數 254  
命令函數 259  
devpkg主函數 264  
zui後的挑戰 267  
習題42 棧與隊列 268  
應該看到的結果 271  
如何改進程序 272  
附加任務 272  
習題43 簡單的統計引擎 273  
滾動標準差和平均值 273  
實現 274  
如何使用這個引擎 279  
附加任務 280  
習題44 環形緩衝區 281  
單元測試 284  
應該看到的結果 284  
如何改進程序 285  
附加任務 285  
習題45 簡單的TCP/IP客戶端 286  
加強Makefile 286  
netclient的代碼 286  
應該看到的結果 290  
如何破壞程序 291  
附加任務 291  
習題46 三元搜索樹 292  
優點和缺點 300  
如何改進程序 300  
附加任務 301  
習題47 快速URL路由 302  
應該看到的結果 305  
如何改進程序 305  
附加任務 306  
習題48 簡單網絡服務器 307  
規格說明 307  
習題49 統計服務器 308  
規格說明 308  
習題50 統計數據的路由 309  
習題51 存儲統計數據 310  
軟件規格 310  
習題52 入侵和改進你的服務器 311  
接下來的路 312    
				
 
				
				
					《笨辦法學C語言》是一本麵嚮初學者的C語言編程入門書籍。它以一種循序漸進、注重基礎的方式,幫助讀者建立起對C語言的係統性認識,並掌握實際編程所需的技能。本書不同於市麵上一些追求“速成”或“炫技”的書籍,它更側重於“笨辦法”,即通過紮實的基礎講解、大量的實例演示以及必要的知識點拆解,讓讀者真正理解C語言的運行機製和編程思想。  本書的核心理念:     “笨”即是“巧”: 很多時候,我們為瞭追求效率而忽略瞭基礎,結果導緻在遇到復雜問題時無從下手。本書強調,用“笨辦法”紮實地打好基礎,纔能在日後更加遊刃有餘地解決問題。這種“笨”體現在:        耐心和細緻: 不會跳過任何一個可能讓初學者感到睏惑的細節,力求解釋清楚每一個概念的來龍去脈。        反復練習: 通過大量的代碼示例和練習題,讓讀者在動手實踐中加深理解,掌握知識。        邏輯先行: 強調理解程序是如何一步步執行的,而不是死記硬背語法規則。     從零開始,步步為營: 本書假設讀者沒有任何編程基礎。從最簡單的“Hello, World!”程序開始,逐步引入變量、數據類型、運算符、控製結構(條件語句、循環語句)、函數、數組、指針、結構體等核心概念。每一個新概念的引入都會建立在之前所學知識的基礎上,形成一個連續的學習路徑。     理論與實踐相結閤: C語言是一門實踐性很強的語言。本書不僅僅停留在理論講解,更注重通過大量的實際編程示例來展示概念的應用。這些示例代碼由淺入深,貼近實際編程場景,能夠幫助讀者將學到的知識轉化為解決實際問題的能力。     注重編程思維的培養: 編程不僅僅是寫代碼,更是一種解決問題的思維方式。本書在講解語法的同時,也融入瞭許多關於如何分析問題、如何設計算法、如何調試代碼等方麵的指導,幫助讀者培養良好的編程習慣和解決問題的能力。  本書的主要內容亮點:  1.  清晰易懂的語言風格: 作者采用平實、生動的語言,避免使用過於專業的術語,力求讓初學者能夠輕鬆理解。即使是復雜的概念,也會通過生動形象的比喻或類比來解釋,降低學習門檻。  2.  循序漸進的知識體係:        初識C語言: 從程序的構成、開發環境的搭建、第一個C語言程序的編寫與運行開始。詳細介紹`include`、`main`函數、`printf`函數等基礎元素,讓讀者快速體驗編程的樂趣。        數據與運算: 深入講解C語言中的各種數據類型(整型、浮點型、字符型等),以及各種運算符(算術運算符、關係運算符、邏輯運算符、賦值運算符等)。重點闡述數據類型之間的轉換規則,以及錶達式的求值過程。        流程控製: 這是程序邏輯的核心。詳細講解`if-else`語句、`switch-case`語句、`for`循環、`while`循環、`do-while`循環等,並通過大量的圖示和實例,清晰地展示不同流程控製語句的執行邏輯,幫助讀者理解程序的“走嚮”。        函數: 講解函數的概念、定義、調用、參數傳遞,以及函數返迴值。強調函數的重要性,以及如何通過函數來模塊化程序,提高代碼的可讀性和復用性。會介紹遞歸的概念,並通過簡單實例進行演示。        數組: 講解一維數組和多維數組的定義、初始化、訪問以及常見的數組操作。會通過實際例子,如統計學生成績、查找最大/最小值等,來展示數組的應用。        指針: C語言的靈魂之一,也是初學者最容易感到睏惑的部分。本書會用最“笨”但最清晰的方式來講解指針的概念,包括指針變量、地址、解引用、指針運算等。通過圖解和細緻的示例,幫助讀者理解指針與內存的關係,以及指針在數組、函數傳遞等方麵的應用。        結構體: 講解如何定義和使用結構體,實現自定義數據類型的創建。通過實例演示,如何將相關聯的數據組織在一起,提高程序的可維護性。        文件操作(可選/基礎部分): 介紹C語言中基本的文件讀寫操作,讓讀者瞭解如何與文件進行交互,為編寫更復雜的程序打下基礎。  3.  大量的代碼示例與解析:        精選示例: 每一個知識點都會配有精心設計的代碼示例,這些示例力求簡潔明瞭,能夠直接體現所講知識點。        逐行注釋: 代碼示例會進行詳細的逐行注釋,解釋每一行代碼的作用,幫助讀者理解代碼的邏輯。        運行結果分析: 對於每一個示例,都會給齣預期的運行結果,並對結果進行簡要的分析,幫助讀者對照檢查。  4.  豐富的練習題與解答:        鞏固練習: 每章末尾都配有不同難度等級的練習題,旨在幫助讀者鞏固所學知識。        思考題: 包含一些需要思考和發揮創意的題目,引導讀者主動探索和解決問題。        部分題目提供解答思路或參考答案: 對於一些難度較大的題目,會提供解答思路或關鍵代碼,幫助讀者剋服睏難,但不會直接給齣完整代碼,以鼓勵讀者自己動手。  5.  強調“為什麼”: 在講解語法和概念時,本書不僅僅告訴你“怎麼做”,更重要的是告訴你“為什麼這樣做”。例如,為什麼需要數據類型?為什麼需要函數?為什麼需要指針?理解瞭“為什麼”,纔能更好地掌握“怎麼做”。  6.  調試技巧的融入: 在講解過程中,會不時地穿插一些簡單的調試技巧,例如如何通過`printf`來跟蹤變量的值,如何閱讀編譯器給齣的錯誤信息等,幫助讀者學會獨立解決程序中的bug。  適閤讀者群體:     零基礎編程愛好者: 對編程感興趣,但沒有任何編程經驗的初學者。    計算機科學相關專業的學生: 需要係統學習C語言作為入門課程的學生。    希望轉行IT行業的人士: C語言是許多後端開發、嵌入式開發等領域的基礎,學習C語言是進入這些領域的良好起點。    需要溫故知新的人士: 即使已經接觸過C語言,但感覺基礎不牢固,希望通過一本講解細緻的書籍來鞏固基礎的讀者。  本書的獨特價值:  《笨辦法學C語言》旨在培養讀者紮實的編程功底和獨立解決問題的能力。它不是一本讓你快速“會寫”C語言的書,而是一本讓你真正“懂”C語言的書。通過“笨辦法”,它將幫助你建立起堅實的編程基礎,為日後學習更復雜的編程語言和技術打下堅實的基礎。它強調的耐心、細緻和對基礎的深刻理解,將是你在編程道路上最寶貴的財富。