C语言问题集:从基础到高级

需积分: 9 1 下载量 149 浏览量 更新于2024-07-27 收藏 1.14MB PDF 举报
"《你必须知道的495个C语言问题.pdf》是关于C语言常见问题的一个集合,由Steve Summit原著,朱群英和孙云翻译。这本书旨在解决C语言编程中的各种疑问,覆盖了声明与初始化、结构、联合和枚举等多个方面。书中包含的问答形式的问题解答,有助于读者深入理解和应用C语言的特性。 1. 关于整数类型的选取,C语言提供了多种整数类型(如int, short, long, long long),选择哪种类型取决于你需要存储的数值范围以及平台的位宽。 2. 在64位系统上,64位类型通常包括long和long long,它们能存储大整数,但具体实现可能因编译器和操作系统而异。 3. 全局变量和函数的最佳定义和声明应遵循作用域规则,尽量减少全局变量的使用以降低代码的耦合度,并确保函数声明和定义的一致性。 4. extern在函数声明中表示该函数是在其他地方定义的,告知编译器函数的存在,但不提供函数体。 5. 关键字auto在现代C++中已不再常用,但在老版本C语言中用于局部变量声明,表明变量的作用域仅限于当前函数。 6. C语言允许结构体包含指向自身的指针,这是实现递归数据结构的基础,如链表、树等。 7. 复杂声明的理解需要掌握类型解析的规则,例如解析一个指向返回指针的函数的指针数组,需要从右向左读取,理解每个操作符的含义。 8. 如果函数只定义一次但编译器报重复定义错误,可能是头文件包含不当导致的,应检查#include指令并使用#include guards或条件编译避免多次包含。 9. main()的正确定义通常是int main(),void main()在标准C中不是有效的,尽管某些编译器可能接受。 10. 未初始化的变量的初始值是不确定的,不应依赖其值。全局变量默认不初始化,可能包含随机数据,而不是特定的“零”值。 11. 字符串字面量不能初始化非静态局部数组,因为内存分配不同。 12. malloc返回的是未初始化的指针,需要显式赋值,不能直接作为字符串字面量初始化。 13. 字符串字面量(如"stringliteral")是常量,尝试修改会导致程序崩溃,应使用字符数组存储可修改的字符串。 14. 函数指针的声明涉及类型匹配,初始化时需确保指针类型与函数类型兼容。 15. 结构体声明的差异在于typedef的作用,它创建了一个新的类型名,使得之后可以使用新类型名代替结构体名称。 16. 自定义结构体后立即使用struct关键字是不合法的,需要先声明再使用。 17. 结构体可以包含指向自身的指针,这是实现自引用数据结构的关键。 18. 在C语言中实现抽象数据类型通常通过结构体和指针结合,以及私有/公共接口的划分。 19. C语言不具备像C++那样的面向对象特性,但可以通过结构体和函数指针模拟类和继承的效果。 20. 使用结构体如struct name {int namelen; char namestr[1];}可以实现变长字符串,其中namestr[1]可以动态扩展到任意长度。 这本书的每个问题都提供了深入的洞察,帮助读者克服C语言编程中的难点,提升编程技能。"