C语言编程常见问题解答

需积分: 32 1 下载量 5 浏览量 更新于2024-07-31 收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是一本关于C语言常见问题解答的书籍,由Steve Summit原著,朱群英和孙云翻译,修订版为0.9.4,发布于2005年6月23日。书中涵盖了C语言的多个方面,包括声明与初始化、结构、联合和枚举等内容,旨在帮助读者解决编程过程中遇到的实际问题。" C语言是计算机科学的基础,掌握其精髓对于任何程序员来说都是至关重要的。本书以问题和答案的形式,深入浅出地讲解了C语言的一些关键概念和技术。 1. 声明和初始化 - 选择整数类型时,应根据需要的存储大小和平台特性来决定,例如使用`int`、`long`、`short`或`long long`。 - 在64位系统上,`long`通常是64位,但不是所有64位类型都叫`long long`,这取决于具体实现。 - 全局变量和函数应在文件的外部(如头文件)进行声明,在需要的地方使用`extern`关键字引入。 - `extern`在函数声明中表明该函数是在其他地方定义的。 - `auto`关键字在现代C++中很少使用,但在早期C语言中用于局部变量声明,现在默认就是这个行为。 - 结构体可以包含指向自身的指针,但需要正确处理指针类型和结构体类型的关系。 2. 复杂声明的理解 - 学习如何读取和创建复杂声明,如函数指针和多维数组,是理解和编写高级C代码的关键。 - 函数重定义的问题可能源于头文件的不恰当包含或使用`#ifndef`预处理器指令防止重复定义。 - `main()`的正确定义通常为`int main(void)`或`int main(int argc, char *argv[])`,而`void main()`不符合标准。 - 未初始化的变量的值是不确定的,不能假设它们为零、空指针或浮点零。 - 字符串字面量不能赋值给非静态存储区的字符数组,因为字符串字面量是只读的。 - 初始化指针时,应确保分配足够的内存,例如`char *p = malloc(sizeof(char) * 10);` - 字符数组和字符串字面量的差异在于,对字符串字面量的修改可能导致未定义行为。 - 初始化函数指针可以通过函数名直接赋值,如`void (*func_ptr)(int) = my_function;` 3. 结构、联合和枚举 - `struct x1{};`是结构体定义,`typedef struct {} x2;`是为结构体创建别名,两者在使用上有细微差别。 - `struct x{}; x the_struct;`不正确是因为结构体定义后需要使用`struct`关键字引用。 - 结构体可以包含指向自身的指针,常用于自引用或链表结构。 - 实现抽象数据类型通常通过结构体和函数指针,封装数据和操作。 - C语言不支持面向对象编程的继承,但可以模拟类似行为,如结构体嵌套、组合和函数指针。 这本书不仅适合初学者,也适合有一定经验的C程序员,因为它覆盖了从基础到高级的各种问题,有助于巩固和扩展读者的C语言知识。通过解决这些问题,读者可以更好地理解和避免常见的陷阱,提高编程技能。