C语言编程常见问题解答

需积分: 12 3 下载量 65 浏览量 更新于2024-07-29 收藏 1.33MB PDF 举报
"《你必须知道的 495个C语言问题》是关于C语言常见问题的集合,由Steve Summit原著,朱群英和孙云翻译,2005年6月修订至0.9.4版。本书涵盖了声明与初始化、结构、联合和枚举等多个主题,旨在帮助读者解决C语言编程中遇到的各种问题。 1. 声明和初始化 - 整数类型的选用应考虑平台和需求,如int、short、long long等,64位机上的64位类型通常为long或long long。 - extern用于在其他源文件中引用函数或变量的声明,表示它们是在其他地方定义的。 - auto关键字在C99标准后不再常用,主要用于旧代码中表示局部变量。 - 结构体可以包含指向自身的指针,但需注意内存管理和递归定义的复杂性。 - 初始化时,未指定初始值的全局变量默认为0,但这不意味着它一定是空指针或浮点零,具体取决于类型。 - 不可直接在数组初始化中使用动态分配的内存,如`char *p=malloc(10)`,因为这不提供初始值,需使用strcpy等函数填充。 - 字符串字面量不能赋值给非const指针,可能导致运行时错误,如`char *p="stringliteral"`,修改p[i]会崩溃。 2. 结构、联合和枚举 - 声明struct x1{}和typedef struct {} x2;的区别在于,typedef创建了一个新的类型名,可以直接使用x2而不需struct关键字。 - 结构体后跟分号表示匿名结构体,不能立即使用变量声明,如`struct x{}; x thestruct;`是错误的。 - 结构体可以包含指向自身的指针,用于自引用或构建复杂的数据结构。 - 实现抽象数据类型(ADT)通常通过结构体和指向操作这些结构体的函数指针来实现。 - C语言不是面向对象的语言,但可以通过组合结构体和函数指针模仿一些面向对象特性,如模拟类和继承。 此书详细解答了这些问题,并提供了更多关于C语言声明、内存管理、指针操作、结构体和枚举的深入知识,是C程序员的重要参考资源。通过学习,读者可以更好地理解和避免C语言编程中的常见陷阱,提高编程技巧和代码质量。"