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

需积分: 13 3 下载量 134 浏览量 更新于2024-07-31 收藏 1.35MB PDF 举报
"《你必须知道的495个C语言问题》是关于C语言常见问题的集合,由Steve Summit原著,朱群英和孙云翻译。这本书旨在帮助读者理解和解决在C语言编程中可能遇到的各种问题。内容涵盖声明与初始化、结构、联合和枚举等多个方面,对C语言的关键概念进行了深入探讨。" 1. **声明和初始化** - 在选择整数类型时,应考虑数值范围和平台兼容性,例如int、short、long和long long。 - 64位机上的64位类型如`long`和`long long`是64位宽,但具体取决于编译器和平台。 - 全局变量和函数的最佳声明通常是在头文件中,以便在多个源文件间共享。 - `extern`用于在不同的源文件间引用全局变量或函数的声明。 - `auto`关键字在现代C语言中并不常用,主要用于旧代码中,表示局部变量的存储类别。 - 结构体可以包含指向自身的指针,但需要正确处理递归定义和内存分配。 - 复杂声明的解析需要理解类型嵌套和指针的关系,如函数指针数组等。 - 非法重定义通常是由于未包含适当的头文件保护或多次定义同一实体。 - `main()`函数的正确定义通常是`int main(void)`,而`void main()`不符合标准。 - 未初始化的变量的值是不确定的,不能依赖于它们默认为零,尤其是浮点数和指针。 - 字符串字面量不能赋值给未初始化的指针,需要使用`malloc`分配内存后赋值。 - `char a[]="stringliteral";`是静态初始化,不可修改,而`char *p="stringliteral"`是字符串常量指针,同样不可修改。 - 函数指针的声明和初始化涉及类型匹配,例如`typedef`和`(*function_ptr)(参数列表)`。 2. **结构、联合和枚举** - 声明`struct x1{};`创建了一个匿名结构类型,`typedef struct {} x2;`则创建了一个名为`x2`的类型别名。 - `struct x {}; x the_struct;`是不正确的,因为没有类型名`x`,应为`struct x the_struct;`。 - 结构可以包含指向自己的指针,用于实现递归数据结构,如链表或树。 - 实现抽象数据类型通常通过结构体和私有/公共接口来实现封装。 - C语言不支持面向对象编程的继承,但可以模拟类似行为,如结构体包含结构体实例或使用组合。 这本书详细解答了这些问题,并提供了更多关于C语言的深入见解,适合初学者和经验丰富的开发者参考。通过学习这些问题和答案,读者能够提高C语言编程技能,避免常见错误,以及更好地理解语言的底层机制。