![](/c49/30/10356599475.jpg)
出版社:人民郵電 ISBN:9787115376763 商品編碼:10356599475 開本:16 出版時間:2016-04-01 代碼:45 作者:孫雲朱
" 基本信息 - 商品名稱:你必須知道的495個C語言問題(C和C++實務精選)
- 作者:(美)薩米特|譯者:孫雲//朱群英
- 代碼:45
- 出版社:人民郵電
- ISBN號:9787115376763
其他參考信息 - 出版時間:2016-04-01
- 印刷時間:2016-04-01
- 版次:1
- 印次:1
- 開本:16開
- 包裝:平裝
- 頁數:262
- 字數:393千字
編輯推薦語 作者薩米特在《你必須知道的495個C語言問題(C和C++實務精選)》中提供了常遇到的495個C語言問題的答案。本書針對作者在Internet上廣受歡迎的CFAQ列表進行了全面修訂,回答了400多個問題來闡釋關鍵點並為程序員提供實用指導。對於所有的C程序員來說,本書都是頗受歡迎的參考,它提供了準確的答案,有見地的解釋,並輔之以大量的代碼示例來澄清要點。 內容提要 薩米特著的《你必須知道的495個C語言問題(C 和C++實務精選)》以問答的形式組織內容,討論 了學習或使用C語言的過程中經常遇到的一些問題。 書中列出了C用戶經常問的400多個經典問題,涵蓋了 初始化、數組、指針、字符串、內存分配、庫函數、 C預處理器等各個方面的主題,並分別給出了解答, 而且結合代碼示例闡明要點。 《你必須知道的495個C語言問題》結構清晰,講 解透徹,是各高校相關專業C語言課程很好的教學參 考書,也是各層次C程序員的實踐指南。 作者簡介 Steve Summit,畢業於麻省理工學院,有15年的C編程經驗。他在Internet上廣受尊重,並且維護著Usenet新聞組comp.lang.c的FAQ列表。他當前從事C和UNIX的教學工作,並致力於各種C和UNIX項目,其重點是積極的可移植代碼和接口設計。 目錄 **章 聲明和初始化 基本類型 1.1 我該如何決定使用哪種整數類型? 1 1.2 為什麼不**定義標準類型的大小? 1.3 因為C語言沒有**定義類型的大小,所以我一般都用typedef定義int16和int32。 然後根據實際的機器環境把它們定義為int、short、long等類型。這樣看來,所有的問題都解決了,是嗎? 2 1.4 新的64位機上的64位類型是什麼樣的? 指針聲明 1.5 這樣的聲明有什麼問題?char *p1, p2; 我在使用p2的時候報錯了。 1.6 我想聲明一個指針,並為它分配一些空間,但卻不行。這樣的代碼有什麼問題?char *p; *p=malloc(10); 聲明風格 1.7 怎樣聲明和定義全局變量和函數*好? 1.8 如何在C中實現不透明(抽像)數據類型? 1.9 如何生成“半全局變量”,就是那種隻能被部分源文件中的部分函數訪問的變量? 存儲類型 1.10 同一個靜態(static)函數或變量的所有聲明都必須包含static存儲類型嗎? 1.11 extern在函數聲明中是什麼意思? 1.12 關鍵字auto到底有什麼用途? 類型定義(typedef) 1.13 對於用戶定義類型,typedef 和#define有什麼區別? 1.14 我似乎不能成功定義一個鏈表。我試過typedef struct{char *item; NODEPTR next;}* N 但是編譯器報了錯誤信息。難道在C語言中結構不能包含指向自己的指針嗎? 7 1.15 如何定義一對相互引用的結構? 1.16 Struct{ } x1;和typedef struct{ } x2; 這兩個聲明有什麼區別? 1.17 “typedef int(*funcptr)();”是什麼意思? const 限定詞 1.18 我有這樣一組聲明:typedef char *charp; const charp p; 為什麼是p而不是它指向的字符為const? 1.19 為什麼不能像下面這樣在初始式和數組維度值中使用const值?const int n=5; int a[n]; 1.20 const char *p、char const *p和char *const p有什麼區別? 復雜的聲明 1.21 怎樣建立和理解非常復雜的聲明?例如定義一個包含N個指向返回指向字符的指針的函數的指針的數組? 11 1.22 如何聲明返回指向同類型函數的指針的函數?我在設計一個狀態機,用函數表示每種狀態,每個函數都會返回一個指向下一個狀態的函數的指針。 可我找不到任何方法來聲明這樣的函數——感覺我需要一個返回指針的函數,返回的指針指向的又是返回指針的函數……,如此往復,以至無窮。 12 數組大小 1.23 能否聲明和傳入數組大小一致的局部數組,或者由其他參數指定大小的參數數組? 1.24 我在一個文件中定義了一個extern數組,然後在另一個文件中使用,為什麼sizeof取不到數組的大小? 聲明問題 1.25 函數隻定義了一次,調用了一次,但編譯器提示非法重聲明了。 *1.26 main的正確定義是什麼?void main正確嗎? 1.27 我的編譯器總在報函數原型不匹配的錯誤,可我覺得沒什麼問題。這是為什麼? 1.28 文件中的**個聲明就報出奇怪的語法錯誤,可我看沒什麼問題。這是為什麼? 1.29 為什麼我的編譯器不允許我定義大數組,如double array[256][256]? 命名空間 1.30 如何判斷哪些標識符可以使用,哪些被保留了? 初始化 1.31 對於沒有顯式初始化的變量的初始值可以作怎樣的假定?如果一個全局變量初始值為“零”,它可否作為空指針或浮點零? 18 1.32 下面的代碼為什麼不能編譯? intf(){char a[]="Hello, world!";} *1.33 下面的初始化有什麼問題?編譯器提示“invalid initializers ”或其他信息。char *p=malloc(10); 1.34 char a[]= "string literal";和char *p="string literal"; 初始化有什麼區別?當我向p[i] 賦值的時候,我的程序崩潰了。 19 1.35 char a{[3]}= "abc"; 是否合法? 1.36 我總算弄清楚函數指針的聲明方法了,但怎樣纔能初始化呢? 1.37 能夠初始化聯合嗎? 第2章 結構、聯合和枚舉 結構聲明 2.1 struct x1{ };和typedef struct{ }x2; 有什麼不同? 2.2 這樣的代碼為什麼不對?struct x{ }; x thestruct; 2.3 結構可以包含指向自己的指針嗎? 2.4 在C語言中用什麼方法實現抽像數據類型*好? *2.5 在C語言中是否有模擬繼承等面向對像程序設計特性的好方法? 2.6 為什麼聲明extern f(struct x *p); 給我報了一個晦澀難懂的警告信息? 2.7 我遇到這樣聲明結構的代碼:struct name {int namelen; char name 然後又使用一些內存分配技巧使namestr數組用起來好像素,namelen素個數。它是怎樣工作的?這樣是合法的和可移植的嗎? 23 2.8 我聽說結構可以賦給變量也可以對函數傳入和傳出。為什麼K&R1卻明確說明不能這樣做? 2.9 為什麼不能用內建的==和!=操作符比較結構? 2.10 結構傳遞和返回是如何實現的? 2.11 如何向接受結構參數的函數傳入常量值?怎樣創建無名的中間的常量結構值? 2.12 怎樣從/向數據文件讀/寫結構? 27結構填充 2.13 為什麼我的編譯器在結構中留下了空洞?這導致空間浪費而且無法與外部數據文件進行“二進制”讀寫。能否關掉填充,或者控制結構域的對齊方式? 2.14 為什麼sizeof返回的值大於結構大小的期望值,是不是尾部有填充? 2.15 如何確定域在結構中的字節偏移量? 2.16 怎樣在運行時用名字訪問結構中的域? 2.17 C語言中有和Pascal的with等價的語句嗎? 2.18 既然數組名可以用作數組的基地址,為什麼對結構不能這樣? 2.19 程序運行正確,但退出時卻“core dump ”(核心轉儲)了,怎麼回事? 29聯合 2.20 結構和聯合有什麼區別? 2.21 有辦法初始化聯合嗎? 2.22 有沒有一種自動方法來跟蹤聯合的哪個域在使用? 30枚舉 2.23 枚舉和一組預處理的#define有什麼不同? 2.24 枚舉可移植嗎? 2.25 有什麼顯示枚舉值符號的容易方法嗎? 31位域 2.26 一些結構聲明中的這些冒號和數字是什麼意思? 2.27 為什麼人們那麼喜歡用顯式的掩碼和位操作而不直接聲明位域? 第3章 表達式 第4章 指針 第5章 空指針 第6章 數組和指針 第7 章 內存分配 第8章 字符和字符串 **0章 C預處理器 **1章 ANSI/ISO標準 **2章 標準輸入輸出庫 **3章 庫函數 **4章 浮點運算 **5章 可變參數列表 **6 章 奇怪的問題 **7章 風格 **8章 工具和資源 **9章 繫統依賴 第20章 雜項 術語表 參考文獻
" |