C语言编程常见问题解答

需积分: 42 1 下载量 167 浏览量 更新于2024-07-30 收藏 1.34MB PDF 举报
"你必须知道的495个C语言问题.pdf" 这本资源是一本关于C语言常见问题的集合,由Steve Summit原著,朱群英和孙云翻译,修订版为0.9.4,发布于2005年6月23日。书中涵盖了从声明和初始化到结构、联合和枚举等多个C语言的基础和进阶问题。以下是对部分问题的详细解释: 1.1 关于整数类型的选取,C语言提供了多种整数类型,如`int`, `short`, `long`, `long long`等,选择哪种取决于你需要存储的数值范围以及平台的位宽。在64位系统上,`long`通常为64位,但不是所有64位系统都遵循这一标准,因此了解具体平台的类型大小很重要。 1.2 64位类型的表示取决于具体的编译器和平台。在大多数64位系统中,`long`和`long long`是64位,但`int`通常是32位。使用`stdint.h`头文件中的固定宽度类型如`int64_t`可以确保在任何平台上都是64位。 1.4 `extern`关键字用于声明全局变量或函数在其他源文件中已定义,告诉编译器这些标识符存在于外部。 1.5 `auto`关键字在C语言中默认用于局部变量,表示变量的作用域仅限于当前作用域(通常是函数内部),在C++中,`auto`有更广泛的应用,作为类型推断的关键字。 1.7 复杂声明的理解可以通过自右向左法则,从最右边的标识符开始,向左阅读,依次处理括号和星号。对于返回指向返回指向字符的指针的函数的指针的数组的声明,可以这样理解:`(*(*(*func)(int)))(char*)`,其中`func`是一个接受`int`参数并返回指向函数的指针,这个函数返回一个指向`char*`的指针。 1.10 未初始化的变量的初始值是不确定的,不应依赖其值。全局变量默认不会被初始化为零,除非明确指定。空指针常量是`NULL`,浮点零是`0.0`,两者与未初始化的变量的零值并不相同。 1.13 区别在于数组`a[]`是静态分配的,可以修改,而`p`是动态分配的字符串,修改`p[i]`会导致未定义行为,因为`p`指向的是只读内存。 2.1 声明`struct x1{}`定义了一个结构类型,而`typedef struct {} x2;`创建了一个名为`x2`的类型别名。`struct x1`之后需要使用`struct`关键字来引用,而`x2`可以直接使用。 2.3 结构可以包含指向自身的指针,这是自引用结构,常用于实现链表、树等数据结构。 2.4 实现抽象数据类型(ADT)的方法通常包括结构体封装和使用指针,通过定义操作结构体的函数接口来隐藏内部实现细节。 2.5 C语言本身不支持面向对象特性,但可以通过结构体和函数指针模拟类的接口,以及通过结构体嵌套和指针实现类似继承的效果。 这本书详细解答了495个C语言中的实际问题,旨在帮助读者深入理解和解决编程过程中遇到的常见困惑,对C语言初学者和有一定经验的开发者都极具参考价值。