C语言编程常见问题解答

需积分: 0 1 下载量 180 浏览量 更新于2024-07-31 收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是关于C语言编程常见问题的集合,由Steve Summit原著,朱群英和孙云翻译,2005年的修订版为0.9.4。这本书涵盖了从声明和初始化到结构、联合和枚举等多个方面的知识点,旨在帮助程序员解决C语言编程中遇到的实际问题。 1. 声明和初始化 - 整数类型的选用应考虑平台和需求,比如int、long、short和unsigned等。 - 在64位系统上,64位类型如long long是64位宽。 - 全局变量和函数的定义与声明应该清晰,避免命名冲突和作用域问题。 - extern用于在其他源文件中引用已声明但未定义的外部变量或函数。 - auto关键字在现代C语言中主要用于旧代码,一般不用来声明局部变量。 - 结构体可以包含指向自身的指针,但需注意递归定义和内存管理。 - 复杂声明的理解需要掌握类型优先级和嵌套规则。 - 非法重定义通常是由于函数或变量重复声明,确保每个标识符在作用域内唯一。 - main()函数的标准定义是int main(void),void main()并不符合标准。 - 未初始化的变量值是不确定的,不应假设其为零、空指针或浮点零。 - 字符串字面量不能直接赋值给非静态局部数组,可能导致栈溢出。 - malloc分配的内存需初始化后才能安全使用,避免野指针。 - 字符串字面量是常量,修改会导致未定义行为。 - 函数指针的声明和初始化涉及指针类型和函数返回值及参数类型。 2. 结构、联合和枚举 - struct x1{}和typedef struct {} x2;的主要区别在于类型声明的位置和使用时的语法。 - 结构体名前加struct是C语言早期的用法,现在通常可以直接用结构体名。 - 结构体可以包含指向自身的指针,用于构建自引用的数据结构。 - 实现抽象数据类型通常通过结构体和函数指针结合,封装数据和操作。 - C语言不支持面向对象特性,但可以通过模拟(如结构体+函数指针)实现类似功能。 - 缩写的结构声明如struct name{...}可以节省空间,但可能导致内存对齐问题。 本书深入浅出地讲解了C语言中的各种问题,适合初学者和有经验的开发者参考,以提高编程技能和解决实际问题的能力。"