"《你必须知道的495个C语言问题》是一本专注于C语言常见问题解答的书籍,由Steve Summit原著,朱群英和孙云翻译。书中涵盖了从声明和初始化到结构、联合和枚举等多个方面的知识点,旨在帮助读者深入理解和解决C语言编程中遇到的实际问题。"
1. 声明和初始化是C语言的基础,选择合适的整数类型(如int, long, short等)取决于具体需求和平台,64位机上的64位类型如long long通常用于表示大整数。声明全局变量和函数时,应尽量使其作用域最小,减少名字冲突的可能性。extern用于在其他源文件中引用已定义的外部变量或函数。auto关键字在现代C语言中用处不大,主要在旧代码中可能看到,表示局部变量。
1.6 链表的定义可以通过typedef创建,如typedef struct {char *item; NODEPTR next;} NODEPTR;但需要注意typedef后的结构体名不能立即跟自引用。复杂的声明需要逐步理解,例如理解函数指针数组的声明。函数只能定义一次,重复定义会导致编译错误。main()函数的标准定义是int main(void),void main()在某些标准下不被接受。未初始化的变量值是不确定的,全局变量默认不初始化,不能假设它们是零、空指针或浮点零。动态分配的内存(如char *p=malloc(10))必须初始化,否则赋值可能导致访问未分配内存的错误。字符串字面量不能修改,尝试修改会引发不可预知的结果。
1.14 函数指针的声明和初始化可以通过声明一个指向特定返回类型和参数类型的函数指针变量来完成。结构、联合和枚举是C语言中的复合类型,声明struct x1{};和typedef struct {} x2;的区别在于typedef创建了一个新的类型名。结构可以包含指向自身的指针,实现递归结构。抽象数据类型在C语言中通常通过结构体和指向结构体的函数指针实现,而C不支持直接的面向对象特性,但可以通过一些技巧模拟。
2.6 结构体可以包含一个指向自身类型的指针,用于构建自引用或递归结构。在C语言中实现抽象数据类型,通常使用私有实现(隐藏内部细节)和公开接口(通过函数指针)。模拟面向对象特性,如继承,可以通过包含一个结构作为另一个结构的成员来实现,但缺乏多态性等高级特性。
这本书详细解答了C语言编程中的各种问题,对于学习和提升C语言技能非常有帮助,适合初学者和有一定经验的程序员参考。