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

需积分: 50 1 下载量 193 浏览量 更新于2024-08-01 收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是一本关于C语言常见问题的集合,由Steve Summit原著,朱群英和孙云翻译,2005年6月修订至0.9.4版。本书旨在帮助读者理解和解决C语言编程过程中可能遇到的各种挑战,适合于准备C语言笔试和面试的学习者参考。 1. 关于声明和初始化的问题: - 整数类型的选用应根据实际需求,考虑存储空间和效率,如int、long、long long等。 - 在64位系统上,64位整型通常为long或long long类型。 - 全局变量和函数的最佳定义与声明通常是在相关头文件中进行声明,在实现文件中进行定义,使用extern关键字可以在其他文件中引用未定义的全局变量或函数。 - extern在函数声明中表示该函数是在其他地方定义的。 - auto关键字在现代C语言中主要用于限制变量的作用域,但在旧代码中可能会看到其作为默认存储类别的使用。 - 结构体可以包含指向自身的指针,但需要正确处理指针和结构体的声明。 - 复杂声明的理解可以通过自右向左法则,先读取右边的部分,再逐步解析左边的结构。 - 非法重定义通常是由于重复的函数或变量声明,应确保每个标识符在作用域内唯一。 - main()函数的标准定义是`int main(void)`或`int main(int argc, char *argv[])`,void main()不标准但某些编译器可能接受。 - 未初始化的变量值是不确定的,不能做任何假设,全局变量的默认初始化值不是零,需要显式初始化。 - 使用`char *p=malloc(10)`时,p是一个指针,需要使用`strcpy()`或其他方式赋值,直接赋字符串字面量会导致编译错误。 - `char a[]="stringliteral"`是字符串字面量的副本,而`char *p="stringliteral"`是字符串常量,修改p[i]会导致运行时错误。 - 函数指针的声明和初始化需要匹配函数的返回类型和参数列表,初始化通常在声明时或通过赋值完成。 2. 结构、联合和枚举: - 声明`struct x1{};`和`typedef struct {} x2;`的区别在于后者创建了一个类型别名,可以直接使用x2而非struct x2。 - `struct x{}; x theStruct;`是错误的,因为结构体名x仅声明了类型,theStruct需要类型前缀struct。 - 结构体可以包含指向自身的指针,这在实现递归数据结构或自引用结构时很有用。 - 实现抽象数据类型在C中通常通过结构体和指针操作,以及内部实现的私有接口。 - C语言本身不支持面向对象特性,但可以通过结构体和函数指针模拟类和继承的概念。 本书详细解答了这些及其他C语言编程问题,是学习和提升C语言技能的重要参考资料。"
2025-01-05 上传