C语言常见问题与解答
需积分: 0 184 浏览量
更新于2024-10-23
收藏 976KB PDF 举报
"495个C语言问题 -从网上转载"
这篇文档是一个收集了495个关于C语言编程的问题和解答的资源,旨在帮助学习者解决他们在C语言编程过程中遇到的常见问题。由Steve Summit原著,朱群英和孙云翻译,并在2005年6月23日更新到了修订版0.9.4。内容涵盖了声明与初始化、结构、联合和枚举等多个主题。
1. **声明和初始化**
- **问题1.1** 关于整数类型的选取,应考虑目标平台的位宽和性能需求。通常,`int`是默认的整数类型,但在不同的系统上,它的大小可能会有所不同。`long`和`long long`用于表示更大的整数,而`short`则用于节省空间。
- **问题1.2** 在64位系统上,64位整型如`long`或`long long`通常占据8个字节。然而,这取决于具体编译器和标准遵循的情况。
- **问题1.3** 全局变量和函数的最佳声明通常是在文件的开头,而定义应在需要它们的地方,以减少作用域污染和提高可读性。
- **问题1.4** `extern`关键字在函数声明中表示该函数是在其他地方定义的,告诉编译器函数的存在,但不提供实现。
- **问题1.5** `auto`关键字在函数内部用于声明局部变量,但现代C++中已很少使用,因为这是默认的行为。
- **问题1.6** 结构体可以包含指向自己的指针,但需要注意递归定义和内存分配的问题,这里的问题可能出在typedef的使用上。
- **问题1.7** 声明复杂类型时,需要理解指针、数组和函数之间的关系。例如,一个指向返回字符指针的函数的指针的数组,可以写作`(int (*)(char*)) (*)[N]`。
- **问题1.8** 函数重定义可能是由于头文件被多次包含,需使用`#ifndef`预处理指令避免。
- **问题1.9** `main()`的合法定义包括`int main(void)`和`int main(int argc, char *argv[])`。`void main()`不完全符合C标准。
- **问题1.10** 未初始化的变量值是不确定的,不能假设它们是零。全局变量的默认值不是零,而是未定义的。
- **问题1.11** 字符串字面量不能被直接赋给非静态字符数组,因为字符串字面量是常量。
- **问题1.12** `malloc()`返回的是未初始化的内存,需要显式初始化。`char *p = malloc(10)`之后,`p`只是一个指向内存块的指针,不能直接赋值。
- **问题1.13** `char a[]="stringliteral"`创建了一个字符数组并复制了字符串;`char *p="stringliteral"`是一个指向字符串字面量的指针,尝试修改p[i]会导致未定义行为。
- **问题1.14** 初始化函数指针需要提供匹配的函数类型。例如,`typedef int (*func_ptr)(int); func_ptr my_ptr = my_function;`。
2. **结构、联合和枚举**
- **问题2.1** `struct x1{}`声明了结构类型`x1`,而`typedef struct {} x2;`将匿名结构体类型命名为`x2`,两者都是创建新类型的方式,但后者更便于使用。
- **问题2.2** `struct x{}; x the_struct;`是错误的,因为`x`在这里是一个未声明的类型。应该使用`struct x the_struct;`。
- **问题2.3** 结构体可以包含指向自身的指针,这在实现递归数据结构如链表、树等时很有用。
- **问题2.4** 实现抽象数据类型(ADT)通常通过结构体和指向结构体的函数指针来隐藏实现细节,以达到信息隐藏。
- **问题2.5** C语言不支持原生的面向对象特性,但可以通过模仿类的概念,如使用结构体和指向成员函数的指针来实现类似的功能。
这些问题是C语言初学者和有经验的程序员都可能遇到的挑战,理解这些问题的答案有助于提高C语言编程技能。文档中的其他问题会涉及更多的主题,如指针操作、内存管理、类型转换以及预处理器宏等。通过深入学习和实践,程序员能够更好地掌握C语言的核心概念和最佳实践。
2008-11-03 上传
2021-10-11 上传
2013-04-10 上传
2023-03-08 上传
2008-11-04 上传
caixhc
- 粉丝: 4
- 资源: 8
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常