C语言编程常见问题与解答

需积分: 0 7 下载量 42 浏览量 更新于2024-08-02 收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是一个汇集了C语言常见问题的集合,由Steve Summit原著,朱群英和孙云翻译,版本为0.9.4,发布于2005年6月23日。这本书涵盖了从声明和初始化到结构、联合和枚举等多个方面的C语言知识,旨在帮助新手和有经验的程序员解决在编程过程中可能遇到的问题。" 在C语言中,声明和初始化是编程的基础,它们涉及到类型选择、变量声明和内存管理等多个方面: 1.1 对于整数类型的选择,应根据需要处理的数据范围来决定,如int、short、long和long long分别对应不同的存储大小和取值范围。 1.2 在64位系统上,64位类型如long通常为64位,但并非所有平台都一致,需要查阅具体平台的文档以确保正确使用。 1.3 全局变量和函数的声明应清晰明了,避免名字冲突,合理使用extern关键字表明变量或函数在其他文件中定义。 1.4 extern在函数声明中表示该函数是在其他地方定义的,告诉编译器函数的存在,但不提供函数体。 1.5 关键字auto在现代C语言中主要用于在函数内部定义局部变量,但在大多数情况下,可以省略,因为这是默认的行为。 1.6 结构体可以包含指向自身的指针,问题在于typedef和struct定义的混合使用,应正确使用typedef定义结构体类型,避免语法错误。 1.7 复杂声明的理解需要熟悉声明的读取规则,从右到左识别操作符,再向左解析类型,例如,函数指针数组的声明。 1.8 非法重定义通常是因为多次定义了同名的函数或变量,需检查源文件以消除重复定义。 1.9 main()的正规定义通常是int main(void),void main()虽然在某些编译器中可行,但不符合标准C。 1.10 未初始化的变量的值是不确定的,不应依赖其默认为零。全局变量会自动初始化,但可能不是零,特别是对于浮点数和指针。 1.11 字符串字面量不能直接赋值给未声明长度的字符数组,因为编译器无法确定数组大小。 1.12 malloc返回的是未初始化的内存,不能直接作为字符串初始化,需要使用strcpy等函数将字符串复制过去。 1.13 字符串字面量是常量,尝试修改p[i]会导致未定义行为,因为常量字符串不能被修改。 1.14 函数指针的声明和初始化可通过类型匹配,如`typedef int (*func_ptr)(int); func_ptr my_func = some_function;`。 结构、联合和枚举是C语言中构造复杂数据类型的重要工具: 2.1 声明struct x1{};创建了一个未命名的结构类型,而typedef struct {} x2;创建了一个名为x2的结构类型别名。 2.2 语法结构struct x{}; x the_struct;是错误的,应使用struct x the_struct;或者typedef后的x the_struct;。 2.3 结构体可以包含指向自身的指针,常用于实现链表、树等数据结构。 2.4 实现抽象数据类型(ADT)通常通过结构体和函数指针结合,隐藏实现细节,提供公共接口。 2.5 C语言不支持面向对象特性,但可以通过结构体模拟类,函数指针模拟方法,达到类似效果。 这本书的问题集涵盖了C语言的多个核心概念,对于想要深入理解和掌握C语言的程序员来说是一份宝贵的资源。