C语言常见问题与解答
![](https://csdnimg.cn/release/wenkucmsfe/public/img/starY.0159711c.png)
"C语言常见问题集 文字版"
本资源是一份关于C语言常见问题的集合,由Steve Summit原著,朱群英和孙云翻译,修订版为0.9.4,发布于2005年6月23日。该文档旨在解答C语言编程过程中可能遇到的各种疑问,涵盖声明和初始化、结构、联合和枚举等多个方面。
1.1 选择整数类型时,应考虑数值范围和效率,例如int通常用于一般计算,long int用于需要更大范围的整数,short int则用于节省内存。
1.2 在64位系统上,64位类型如long long int通常代表64位整数,但具体取决于编译器的实现。
1.3 全局变量和函数的定义应在所有使用它们的源文件之外,而声明则应在每个需要使用它们的文件顶部,用extern关键字进行。
1.4 extern在函数声明中表示该函数是在其他地方定义的,告知编译器该函数存在但不在当前文件中定义。
1.5 关键字auto在C语言中主要用于旧版本的函数作用域变量声明,现代C++中已经不再使用,但在C语言中仍然保留。
1.6 在C语言中,结构体可以包含指向自身的指针,问题可能在于typedef和结构体定义的使用方式不正确,需要正确地定义和声明typedef。
1.7 解析复杂声明的关键是自右向左读取,理解每个部分的作用,例如理解指针、数组和函数返回类型的嵌套。
1.8 如果函数只定义了一次,但编译器报非法重定义错误,可能是由于头文件包含了多次,使用#include guards或extern "C"来避免。
1.9 main()的合法定义通常是int main(void)或int main(int argc, char *argv[]),void main()不符合标准C。
1.10 未初始化的变量的值是不确定的,不能假设为零、空指针或浮点零。全局变量在未显式初始化时,其值可能是随机的。
1.11 字符串字面量不能直接赋值给局部数组,需要使用strcpy()或类似的函数。
1.12 malloc()分配的内存需要通过指针解引用后赋值,如*(p+0) = 's',或者使用strcpy()。
1.13 常量字符串字面量可以赋值给字符数组,但不能直接赋值给指针。对p[i]赋值会导致崩溃,因为字符串字面量是只读的。
1.14 函数指针的声明和初始化需要匹配函数的返回类型和参数列表,例如int (*func_ptr)(int, int) = some_function;。
2.1 声明struct x1{};定义了一个匿名结构类型,而typedef struct {} x2;创建了一个名为x2的类型别名。
2.2 struct x{}; x the_struct;是错误的,因为结构体类型需要命名,可以改为struct x {}; struct x the_struct;。
2.3 结构体可以包含指向自己的指针,这在实现递归数据结构或自引用结构时非常有用。
2.4 实现抽象数据类型通常通过结构体和一组操作这些结构体的函数来完成,保持结构体内部细节的隐藏。
2.5 C语言本身不支持面向对象特性,但可以通过结构体和函数指针模拟类和继承的概念。
这份问题集提供了C语言编程中许多常见问题的解答,对于初学者和有经验的程序员都是有价值的参考资源。
2023-07-03 上传
2023-06-25 上传
2023-07-06 上传
2023-07-27 上传
2024-01-20 上传
2023-07-25 上传
2023-07-06 上传
2023-07-03 上传
2024-01-14 上传
![](https://profile-avatar.csdnimg.cn/6b4c63c45206491cb2529db0a18231ad_freeyxm.jpg!1)
NoneWithVoid
- 粉丝: 6
- 资源: 21
最新资源
- 构建Cadence PSpice仿真模型库教程
- VMware 10.0安装指南:步骤详解与网络、文件共享解决方案
- 中国互联网20周年必读:影响行业的100本经典书籍
- SQL Server 2000 Analysis Services的经典MDX查询示例
- VC6.0 MFC操作Excel教程:亲测Win7下的应用与保存技巧
- 使用Python NetworkX处理网络图
- 科技驱动:计算机控制技术的革新与应用
- MF-1型机器人硬件与robobasic编程详解
- ADC性能指标解析:超越位数、SNR和谐波
- 通用示波器改造为逻辑分析仪:0-1字符显示与电路设计
- C++实现TCP控制台客户端
- SOA架构下ESB在卷烟厂的信息整合与决策支持
- 三维人脸识别:技术进展与应用解析
- 单张人脸图像的眼镜边框自动去除方法
- C语言绘制图形:余弦曲线与正弦函数示例
- Matlab 文件操作入门:fopen、fclose、fprintf、fscanf 等函数使用详解