C语言编程常见问题解答
需积分: 29 8 浏览量
更新于2025-01-07
收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是一本关于C语言常见问题的书籍,由Steve Summit原著,朱群英和孙云翻译,修订版为0.9.4,发布于2005年6月23日。这本书详细解答了关于C语言声明、初始化、结构、联合和枚举等方面的疑问,旨在帮助读者深入理解和掌握C语言。
1. 在C语言中,选择整数类型通常取决于你需要存储的数值范围和平台。例如,int通常适用于一般计算,long适合处理较大的整数,long long则用于64位系统中的大整数。64位机上的64位类型通常为long或long long。
2. 全局变量和函数的声明应尽可能清晰,避免名字冲突。extern用于在其他文件中引用未在当前文件中定义的外部变量或函数。
3. 关键字auto用于局部变量,但在现代C语言中,它的使用已经不常见,因为默认就是局部作用域。
4. 链表的typedef定义中,typedef struct{char *item; NODEPTR next;}*NODEPTR; 错误可能是由于未正确声明NODEPTR的类型。在C语言中,结构可以包含指向自身的指针,只需正确声明和初始化。
5. 声明和理解复杂声明的关键是理解类型优先级和指针的嵌套。例如,一个指向返回字符指针的函数的指针的数组的声明可能是:(int (*)(char*))[]。
6. 当一个函数只定义一次且被调用时,非法重定义的错误可能是因为重复的函数声明或定义。确保每个函数只有一个定义,并在需要的地方正确声明。
7. main()的正确定义通常是int main(),void main()不是标准C语言的规范。
8. 对于未初始化的变量,其初始值是不确定的,不应依赖它们的值。全局变量默认不会被初始化为零,而是未定义的值。空指针和浮点零是特殊值,需要显式初始化。
9. 代码int f(){char a[]="Hello,world!";}不能编译,因为字符串字面量是const的,不能赋值给非const char数组。
10. char *p=malloc(10); 的问题在于malloc返回的指针需要显式初始化为字符串,如p = malloc(11); p = "stringliteral"; 或者使用strcpy()函数。
11. char a[]="stringliteral"; 和 char *p="stringliteral"; 的区别在于,a是字符数组,可以修改,而p指向不可修改的字符串常量。尝试修改p[i]会导致未定义行为。
12. 初始化函数指针时,需要指定函数类型和参数列表,例如:int (*func_ptr)(int, int) = some_function;
13. 结构、联合和枚举的声明和使用是C语言的重要部分。struct x1{};和typedef struct {} x2;的主要区别在于,typedef创建了一个新的类型名称x2,可以直接使用。而struct x{}; x theStruct; 是定义了一个结构体类型x和一个结构体变量theStruct。
14. 结构可以包含指向自身的指针,这在实现递归数据结构或自引用结构时很有用。
15. 抽象数据类型在C中可以通过结构体和指向结构体的指针实现。通过提供一组操作(函数)来隐藏数据的具体实现,实现面向过程的封装。
16. C语言不直接支持面向对象编程的特性,如继承和多态,但可以通过结构体模拟类的行为,使用函数指针实现方法调用,以及通过组合结构体达到类似继承的效果。
这本书涵盖了C语言的基础到高级问题,对于学习和提升C语言技能非常有帮助,特别是对初学者和希望深入理解C语言特性的开发者来说。"
163 浏览量
点击了解资源详情
点击了解资源详情
2010-09-27 上传
点击了解资源详情
点击了解资源详情
518 浏览量
2025-01-07 上传
2025-01-07 上传
2025-01-07 上传
hjxaut
- 粉丝: 0
- 资源: 5
最新资源
- FLASH脚本讲解,FLASH脚本讲解,FLASH脚本讲解
- 阿虚嵌入式linux移植笔记
- ASP.NET C#编码规范
- 基于J2EE的Ajax宝典.pdf
- 嵌入式Linux应用程序开发详解
- 如何做研究,如何写论文
- JSP 2.0 EL 手册 (Expression Language)
- ethereal用户手册
- JavaScript Reference Guide.pdf
- ibatis开发指南
- IBM-PC汇编语言答案
- JAVA编码规范及实践
- GCC中文手册【中文GCC帮助】
- 电力行业应用解决方案
- Beginning JSP JSF and Tomcat Web Development
- 30分钟学会STL 比较不错的东西适合初学者