C语言常见问题与解答
需积分: 9 146 浏览量
更新于2024-07-26
收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是关于C语言编程常见问题的集合,由Steve Summit原著,朱群英和孙云翻译,2005年的修订版为0.9.4。这本书涵盖了从声明和初始化到结构、联合和枚举等多个方面的C语言知识,旨在帮助读者解决实际编程中遇到的问题。
1. 在选择整数类型时,应考虑所需的最大值、最小值以及存储空间效率。通常,`int`适合大多数情况,但针对特定需求,可以使用`short`(更小的空间)或`long`/`long long`(更大的范围)。
2. 在64位系统上,`long`通常是64位,但具体取决于具体的C语言实现和平台标准。确保了解所使用的编译器和平台的约定。
3. 全局变量和函数的声明应清晰明确,避免命名冲突和作用域混淆。一般建议先声明,后定义,且函数声明应在头文件中,实现放在源文件中。
4. `extern`关键字用于声明一个在其他地方定义的变量或函数,告知编译器该实体存在于别处。
5. `auto`关键字在C99之后的版本中不再常用,主要用于旧代码,表示局部变量的存储类别。现代C代码通常不需显式使用`auto`。
6. 链表定义中的typedef可以创建一个新的类型名,但这里的问题可能是未正确声明结构体,导致编译错误。正确做法是在typedef之前声明结构体。
7. 解读复杂声明的关键是自右向左读取,例如,一个函数指针数组,返回一个指向字符的指针,应从最内层的类型(字符指针)开始向外读。
8. 非法重定义通常是由于多次声明或定义了相同名称的函数或变量,确保每个实体在作用域内仅声明一次。
9. `main()`的合法定义包括`int main(void)`、`int main(int argc, char *argv[])`。`void main()`不是标准C定义,但某些编译器可能接受。
10. 未初始化的变量的值是不确定的,不应依赖其默认为零或任何特定值。全局变量在未初始化的情况下,内存中的值可能是任意的,包括空指针和浮点零。
11. 字符数组的初始化必须在声明时提供大小,例如`char a[] = "Hello, world!";`,因为字符串常量的长度是固定的。
12. `malloc()`返回的是未初始化的内存,因此`char *p = malloc(10);`后需要使用`strcpy`或其他方式赋值,直接赋字符串常量会导致错误。
13. 字符串字面量和字符数组的区别在于,字符串字面量是不可修改的,而字符数组可以。尝试修改`p[i]`会导致未定义的行为。
14. 函数指针的声明和初始化通常涉及函数的返回类型、参数列表和指针名称,如`typedef int (*func_ptr)(int, int); func_ptr my_func = some_function;`。
15. 结构可以包含指向自身的指针,这是创建递归或自我引用数据结构的基础,如链表或树。
16. 抽象数据类型的实现通常通过结构体和指针操作来完成,隐藏内部细节,只暴露公共接口。
17. C语言本身并不支持面向对象编程(OOP),但可以通过结构体和函数指针模拟类和继承的概念。
这些问题只是书中的一部分,书中的其他章节还会涉及更多C语言的深度问题,如指针、内存管理、预处理器、输入输出、错误处理等方面,是C语言学习者的重要参考资料。"
119 浏览量
397 浏览量
2018-04-13 上传
2023-07-11 上传
2023-12-16 上传
2023-09-05 上传
2023-09-06 上传
2023-05-01 上传
2023-05-01 上传
dmyryrr
- 粉丝: 1
- 资源: 17
最新资源
- 新型智能电加热器:触摸感应与自动温控技术
- 社区物流信息管理系统的毕业设计实现
- VB门诊管理系统设计与实现(附论文与源代码)
- 剪叉式高空作业平台稳定性研究与创新设计
- DAMA CDGA考试必备:真题模拟及章节重点解析
- TaskExplorer:全新升级的系统监控与任务管理工具
- 新型碎纸机进纸间隙调整技术解析
- 有腿移动机器人动作教学与技术存储介质的研究
- 基于遗传算法优化的RBF神经网络分析工具
- Visual Basic入门教程完整版PDF下载
- 海洋岸滩保洁与垃圾清运服务招标文件公示
- 触摸屏测量仪器与粘度测定方法
- PSO多目标优化问题求解代码详解
- 有机硅组合物及差异剥离纸或膜技术分析
- Win10快速关机技巧:去除关机阻止功能
- 创新打印机设计:速释打印头与压纸辊安装拆卸便捷性