C语言编程常见问题解答

需积分: 30 1 下载量 151 浏览量 更新于2024-07-31 收藏 1.34MB PDF 举报
"你必须知道的495个C语言问题" 是一本关于C语言常见问题的集合,由Steve Summit原著,朱群英和孙云翻译。书中涵盖了C语言的基础到高级的各种问题,旨在帮助读者解决在学习和使用C语言过程中可能遇到的困惑。 1. **声明和初始化** - **选择整数类型**:在C语言中,有多种整数类型(如int, short, long, long long),选择哪种类型取决于你需要存储的数值范围以及平台的字长。 - **64位整型**:在64位系统上,通常long是64位,但不是所有64位系统都遵循这一规则,因此需要了解目标平台的ABI(应用二进制接口)。 - **全局变量和函数的声明与定义**:全局变量可以在文件作用域中声明并初始化,函数应该先声明后定义,且全局变量和函数的声明应避免产生名字冲突。 - **extern关键字**:在函数声明中使用extern表示该函数是在其他地方定义的,这里仅是声明其存在。 - **关键字auto**:在C99标准之后,auto作为默认的局部变量存储类别,但在旧版本C语言中,它主要用于在函数内部声明变量。 - **自引用结构体**:可以定义包含指向自身类型的指针的结构体,但需要注意递归类型的正确使用。 - **复杂声明的理解**:C语言中的复杂声明可以通过从右向左读取来理解,例如,一个指向返回指针数组的函数。 - **非法重定义**:如果函数被多次定义,编译器会报错,确保每个函数只有一个定义。 - **main函数的定义**:main函数的标准定义通常是`int main(void)`或`int main(int argc, char *argv[])`,void main不完全符合标准。 - **未初始化的变量**:未初始化的变量的值是不确定的,不能假设它们是零、空指针或浮点零。 - **字符串字面量与字符数组**:字符串字面量不能直接赋值给非字符数组,需要使用字符数组来存储。 - **动态内存分配**:`malloc`分配的内存需要通过指针来初始化,例如`char *p = (char *)malloc(10);`。 - **字符数组与字符串字面量的差异**:字符数组可以修改,而字符串字面量是常量,尝试修改可能导致未定义行为。 - **函数指针的声明与初始化**:声明函数指针时指定其返回类型和参数列表,初始化时需要一个匹配的函数地址。 2. **结构、联合和枚举** - **结构声明**:`struct x1 {}`声明了一个结构类型,而`typedef struct {} x2;`创建了一个类型别名。 - **结构的使用**:在声明结构类型后,需要使用`struct`关键字来创建结构实例,如`struct x1 xthestruct;`。 - **自引用结构**:结构可以包含指向自身的指针,这在实现链表、树等数据结构时很有用。 - **抽象数据类型**:通过结构和指针,C语言可以模拟抽象数据类型,但没有内置的封装和访问控制。 - **面向对象编程**:C语言不是面向对象的语言,但可以通过结构和函数指针模拟面向对象特性,如组合、封装和多态。 这本书详细解答了C语言编程中遇到的各类问题,无论是初学者还是经验丰富的程序员,都能从中受益。通过阅读和理解这些问题,可以提高对C语言的理解,避免常见的编程陷阱,并提升编程技能。