C语言编程常见问题解答
需积分: 50 156 浏览量
更新于2024-07-23
收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是关于C语言编程常见问题的集合,由Steve Summit原著,朱群英和孙云翻译,2005年的修订版为0.9.4。这本书涵盖了声明与初始化、结构、联合和枚举等多个方面的内容,旨在帮助读者解决在C语言编程中可能遇到的各种问题。
1.1 选择整数类型时,应考虑所需的数值范围以及效率。通常,int适用于大多数情况,long long用于需要大整数的情况,short用于节省空间但范围较小的情况。
1.2 在64位机上,64位类型如long或long long通常表示64位的整数。但请注意,这取决于具体的编译器和平台,因此最好查阅特定环境的文档。
1.3 全局变量和函数的最好定义方式是在头文件中声明,在一个单独的源文件中定义,以避免命名冲突和重复定义的问题。使用extern关键字在其他文件中声明全局变量,表示它们在其他地方已定义。
1.4 extern在函数声明中表示该函数已在其他地方定义,告诉编译器函数的存在,但不包含其实际实现。
1.5 auto关键字在C99标准以后已经失去其原有的作用,现在主要在旧代码中看到,用于局部变量的默认存储类别,但在C++中仍具有特定意义。
1.6 C语言允许结构体包含指向自身的指针。在本例中,typedef语句有误,应该是typedef struct { char *item; struct NODEPTR next; } NODEPTR;,其中struct NODEPTR next表示节点指针指向结构体自身。
1.7 使用递归声明可以帮助理解复杂类型,例如,解析一个函数指针数组,每个函数返回一个指向字符的指针。可以逐步分解,从最内层开始向外扩展。
1.8 函数的非法重定义通常是由于多次定义或未正确包含头文件导致的。确保使用预处理器指令#include来防止重复定义,并使用extern声明外部函数。
1.9 main()的正确定义通常是int main(void)或int main(int argc, char *argv[])。void main()虽然在某些情况下可能有效,但不是标准C的推荐做法。
1.10 未初始化的变量的值是不确定的,不应依赖其初始值。全局变量默认值不是“零”,除非显式初始化。空指针和浮点零是特定类型的零值,不能通过未初始化来假设。
1.11 字符串字面量不能直接赋给非静态字符数组,因为字符串字面量是常量,尝试修改会导致未定义行为。
1.12 malloc分配的内存需要进行初始化,例如通过strcpy将字符串复制到分配的内存中。只分配内存不赋值,编译器会报错,因为指针没有指向有效的字符串。
1.13 char a[]="stringliteral";是字符串字面量的拷贝,而char *p="stringliteral";是字符串字面量的引用。修改p[i]会崩溃,因为字符串字面量是只读的。
1.14 函数指针的声明要指定函数的返回类型和参数类型,初始化时需要提供匹配的函数指针。
2.1 声明struct x1{};创建了一个结构类型,而typedef struct {} x2;创建了名为x2的别名。前者需要使用struct关键字来实例化,后者可以直接用x2。
2.2 struct x{}; x theStruct;是错误的,因为结构体类型前缺少了typedef或struct关键字。
2.3 结构体可以包含指向自己的指针,这是创建递归数据结构的基础,如链表、树等。
2.4 实现抽象数据类型(ADT)通常涉及使用结构体和指向结构体的指针,以及定义操作这些数据类型的函数。
2.5 C语言不具备原生的面向对象特性,但可以通过封装、结构体和函数指针模仿面向对象编程的概念,如模拟类和继承。
以上是《你必须知道的495个C语言问题》中部分章节的详细解释,这本书为C语言学习者提供了丰富的参考资料,解答了许多常见的编程疑惑。
121 浏览量
2018-04-13 上传
2010-10-17 上传
2012-10-04 上传
2024-12-27 上传
2024-12-27 上传
2024-12-27 上传
2024-12-27 上传
2024-12-27 上传
康桥的忧伤
- 粉丝: 0
- 资源: 2
最新资源
- NetDocuments-crx插件
- 更丰富:TypeScript后端框架专注于开发效率,使用专用的反射库来帮助您愉快地创建健壮,安全和快速的API
- bianma.rar_Java编程_Java_
- 简单的editActionsForRowAt功能,写在SWIFTUI上-Swift开发
- 反弹:抛出异常时立即获取堆栈溢出结果的命令行工具
- zap-android:专注于用户体验和易用性的原生android闪电钱包:high_voltage:
- Doc:文献资料
- KobayashiFumiaki
- naapurivahti:赫尔辛基大学课程数据库应用程序项目
- Cura:在Uranium框架之上构建的3D打印机切片GUI
- SwiftUI中的倒计时影片混乱-Swift开发
- Example10.rar_串口编程_Visual_C++_
- GeraIFRelatorio:GeraIFRelatorio项目-自动化以帮助在Eclipse引擎上开发的Cobol语言项目编码
- CyberArk Identity Browser Extension-crx插件
- 智能汽车竞赛:完全模型组学习软件资源
- 键盘:在Windows和Linux上挂钩并模拟全局键盘事件