|
-- 會員 / 註冊 --
|
|
|
|
征服C指針 第2版 ( 簡體 字) |
作者:[日]前橋和彌 | 類別:1. -> 程式設計 -> C -> C |
譯者: |
出版社:人民郵電出版社 | 3dWoo書號: 54176 詢問書籍請說出此書號!【有庫存】 NT售價: 495 元 |
出版日:3/1/2021 |
頁數:333 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787115554895 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介:本書以C語言中的重難點“指針”為主題,提供了程序員所需的深入而完整的指針知識。作者結合多年的編程經驗和感悟,從C指針的概念講起,通過實驗一步一步地揭示了指針和數組、內存、數據結構的關系,展現了指針的常見用法,揭示了各種使用技巧,還通過獨特的方式告訴讀者怎樣解讀C語言那些讓人“糾結”的聲明語法,以及如何繞過C指針的陷阱等。第2版基于64位操作系統對內容進行了大幅修訂,新增了對ISO-C99、C11標準下相關內容的介紹等。 本書非常適合C語言中級學習者閱讀,也可作為計算機專業學生學習C語言的參考。 |
目錄:第0章 本書目標與讀者對象 1 0-1 本書目標 2 0-2 讀者對象與內容結構 5
第 1章 打好基礎——預備知識和復習 9 1-1 C語言是什么樣的語言 10 1-1-1 C語言的發展歷程 10 是匯編語言還是匯編器 11 B語言是什么樣的語言 12 1-1-2 不完備和不統一的語法 13 1-1-3 C語言“圣經”——K&R 13 1-1-4 ANSI C之前的C語言 14 1-1-5 ANSI C(C89/90) 16 1-1-6 C95 16 1-1-7 C99 17 1-1-8 C11 18 1-1-9 C語言的理念 19 1-1-10 C語言的主體 20 1-1-11 C語言曾是只能使用標量的語言 21 1-2 內存和地址 23 1-2-1 內存和地址 23 1-2-2 內存和變量 25 size_t類型 27 1-2-3 內存和程序運行 27 1-3 關于指針 29 1-3-1 惡名昭著的指針究竟是什么 29 1-3-2 和指針的第 一次親密接觸 30 1-3-3 地址運算符、間接運算符、下標運算符 34 關于本書中的地址值——16進制表示法 35 混亂的聲明——如何自然地理解聲明 35 雜談:hoge是什么 37 1-3-4 指針和地址之間的微妙關系 38 在運行時既沒有類型信息,也沒有變量名 40 1-3-5 指針運算 41 1-3-6 何謂空指針 42 NULL和0和\\0 43 1-3-7 實踐——從函數返回多個值 46 形參與實參 50 1-4 關于數組 51 1-4-1 使用數組 51 C語言的數組是從0開始的 53 1-4-2 數組與指針的微妙關系 54 1-4-3 下標運算符[]與數組毫無關系 56 語法糖 59 1-4-4 為何存在指針運算這種奇怪功能 59 1-4-5 別再濫用指針運算了 61 更改參數的做法可取嗎 62 1-4-6 試圖將數組作為函數參數傳遞 63 如果對數組進行值傳遞 65 1-4-7 聲明函數形參的方法 66 C語言為什么不進行數組邊界檢查 67 1-4-8 C99中的可變長數組 68
第 2章 做個實驗——C語言是怎樣使用內存的 71 2-1 虛擬地址 72 關于scanf() 75 未定義、未指定、實現定義 77 2-2 C語言中內存的使用方法 78 2-2-1 C語言中變量的種類 78 2-2-2 嘗試輸出地址 80 存儲類說明符 80 2-3 函數與字符串字面量 85 2-3-1 只讀內存區域 85 2-3-2 指向函數的指針 86 2-4 靜態變量 88 2-4-1 什么是靜態變量 88 2-4-2 分割編譯與鏈接 88 2-5 自動變量(棧) 91 2-5-1 內存空間的“重復使用” 91 2-5-2 函數調用究竟發生了什么 91 調用約定 95 2-5-3 自動變量的引用 95 一旦函數執行結束,自動變量的內存空間就會被釋放 98 2-5-4 典型的安全漏洞——緩沖區溢出漏洞 99 操作系統針對緩沖區溢出漏洞給出的對策 102 2-5-5 可變長參數 103 assert() 106 試寫一個用于調試的函數 107 2-5-6 遞歸調用 110 2-5-7 C99中的可變長數組(VLA)的棧 113 2-6 利用malloc()動態分配內存(堆) 116 2-6-1 malloc()的基礎知識 116 應該強制轉換malloc()的返回值類型嗎 119 2-6-2 malloc()是系統調用嗎 119 2-6-3 malloc()中發生了什么 120 2-6-4 free()之后相應的內存空間會怎樣 122 Valgrind 124 2-6-5 碎片化 124 2-6-6 malloc()以外的動態內存分配函數 125 假如malloc()參數為0 127 malloc()的返回值檢查 128 程序結束時也必須調用free()嗎 129 2-7 對齊 131 結構體的成員名稱在運行時也是缺失的 134 2-8 字節序 135 2-9 關于語言規范和實現——抱歉,前面的內容都是騙你的 137
第3章 語法揭秘——它到底是怎么回事 139 3-1 解讀C語言聲明 140 3-1-1 用英語閱讀 140 3-1-2 解讀C語言聲明 141 近來的語言多數是將類型后置的 144 3-1-3 類型名 145 如果把間接運算符*后置 146 3-2 C語言數據類型的模型 147 3-2-1 基本類型和派生類型 147 3-2-2 指針類型的派生 148 3-2-3 數組類型的派生 150 3-2-4 什么是指向數組的指針 150 3-2-5 C語言中不存在多維數組 152 3-2-6 函數類型的派生 154 3-2-7 計算類型的長度 155 3-2-8 基本類型 157 3-2-9 結構體和聯合體 159 3-2-10 不完全類型 159 3-3 表達式 162 3-3-1 表達式和數據類型 162 對“表達式”使用sizeof 164 3-3-2 什么是左值——變量的兩張面孔 166 “左值”的由來 167 3-3-3 數組→指針的轉換 168 3-3-4 與數組和指針相關的運算符 169 3-3-5 多維數組 171 運算符的優先級 173 3-4 解讀C語言聲明(續) 176 3-4-1 const修飾符 176 3-4-2 如何使用const?可以用到哪種程度 178 const可以代替#define嗎 181 3-4-3 typedef 181 3-5 其他 185 3-5-1 函數形參的聲明(ANSI C版) 185 K&R中關于函數形參聲明的說明 186 3-5-2 函數形參的聲明(C99版) 188 3-5-3 關于空的下標運算符[] 189 定義與聲明 191 3-5-4 字符串字面量 192 字符串字面量是char的數組 194 3-5-5 關于指向函數的指針引發的混亂 195 3-5-6 強制類型轉換 196 3-5-7 練習——解讀復雜聲明 198 3-6 請記住:數組與指針截然不同 203 3-6-1 你為什么感到混亂 203 3-6-2 在表達式中 204 3-6-3 在聲明中 206
第4章 數組和指針的常見用法 209 4-1 基本用法 210 4-1-1 通過返回值以外的方法返回 210 4-1-2 將數組作為函數的參數傳遞 211 4-1-3 動態數組——通過malloc()分配的可變長數組 212 其他語言的數組 214 4-2 組合使用 216 4-2-1 動態數組的數組 216 寬字符 223 4-2-2 動態數組的動態數組 225 4-2-3 命令行參數 228 4-2-4 通過參數返回指針 230 什么是“雙指針” 235 4-2-5 將多維數組作為函數的參數傳遞 236 4-2-6 將多維數組作為函數的參數傳遞(VLA版) 237 4-2-7 通過malloc()分配縱橫可變的二維數組(C99) 239 C語言中的多維數組是行優先的 240 縱橫可變的二維數組的ANSI C實現 241 Java和C#的多維數組 242 4-2-8 數組的動態數組 243 4-2-9 在考慮可變之前,不妨考慮使用結構體 244 4-2-10 可變長結構體(ANSI C版) 246 關于分配可變長結構體時的長度指定 248 4-2-11 柔性數組成員(C99) 248 指針可以指向數組的最后一個元素的下一個元素 249
第5章 數據結構——指針的真正用法 251 5-1 案例學習1:計算單詞的使用頻率 252 5-1-1 案例的需求 252 各種語言中指針的叫法 253 引用傳遞 253 5-1-2 設計 256 關于頭文件的寫法 259 5-1-3 數組版 261 5-1-4 鏈表版 265 頭文件的公有和私有 271 當需要同時處理多個數據時 272 迭代器 273 5-1-5 添加查找功能 275 翻倍游戲 277 5-1-6 其他數據結構 277 5-2 案例學習2:繪圖工具的數據結構 283 5-2-1 案例的需求 283 5-2-2 表示各種圖形 284 關于坐標系 285 5-2-3 Shape類型 286 5-2-4 討論——還有其他方法嗎 289 能保存任何類型的鏈表 293 5-2-5 圖形的組合 294 5-2-6 通過指向函數的指針的數組分配處理 300 5-2-7 通往繼承與多態之路 302 將draw()放入Shape中真的好嗎 302 5-2-8 指針的可怕之處 304 5-2-9 那么,指針到底是什么呢 305
第6章 其他——拾遺 307 6-1 新的函數組 308 6-1-1 添加了范圍檢查的函數(C11) 308 restrict關鍵字 310 6-1-2 無須使用靜態存儲空間的函數(C11) 311 6-2 陷阱 314 6-2-1 整數提升 314 6-2-2 如果在(老式的)C語言中使用float類型的參數 316 6-2-3 printf()與scanf() 318 6-2-4 原型聲明的光與影 319 6-3 慣用寫法 321 6-3-1 結構體聲明 321 6-3-2 自引用結構體 322 6-3-3 結構體的相互引用 323 6-3-4 結構體的嵌套 324 6-3-5 聯合體 325 6-3-6 無名結構體和無名聯合體(C11) 326 6-3-7 數組的初始化 327 6-3-8 指向char的指針的數組的初始化 328 6-3-9 結構體的初始化 329 6-3-10 聯合體的初始化 330 6-3-11 指定初始化(C99) 331 6-3-12 復合字面量(C99) 332
參考文獻 334 |
序: |
|