C语言常见问题与解答

需积分: 0 2 下载量 23 浏览量 更新于2024-08-01 收藏 214KB DOCX 举报
"C语言常见问题集,由Steve Summit原著,朱群英和孙云翻译,修订版0.9.4,2005年6月23日发布。本书涵盖了C语言编程中的常见问题和解答,涉及声明、初始化、类型、函数、变量初始化、结构体、联合和枚举等多个方面。" 在C语言编程中,理解和解决这些问题至关重要,因为它们涉及到程序的正确性和效率。以下是一些关键知识点的详细解释: 1. **声明和初始化**: - **整数类型选择**:根据所需表示的数值范围和系统架构选择`int`, `short`, `long`, 或 `long long`。 - **64位类型**:在64位机器上,`long`通常为64位,但不是所有平台都一致,需查看具体标准或编译器文档。 - **全局变量和函数声明**:最好在头文件中声明,在实现文件中定义,以避免重复声明导致的错误。 - **extern**:用于在不同源文件间指示变量或函数的存在,不分配存储空间。 - **关键字auto**:在现代C++中几乎不用,但在旧代码中表示局部变量。 2. **链表定义**:C语言允许结构体包含指向自身的指针,但语法要求正确,确保类型匹配。 3. **复杂声明理解**:使用反向阅读和分层解析的方法来理解复杂的声明,如函数指针数组。 4. **函数定义与调用**:每个函数只能定义一次,多次定义会导致编译错误。`void main()`是不标准的,推荐使用`int main(void)`。 5. **变量初始化**:未初始化的全局变量默认值未定义,不应假设为零。局部变量未初始化时,其值不确定。 6. **字符串初始化**:数组必须指定大小,如`char a[11] = "Hello, world!";`。动态分配的字符数组需要使用`strcpy`或`strncpy`填充。 7. **指针与字符串**:`char *p = "stringliteral"`创建了只读字符串,试图修改会引发未定义行为。`char a[] = "stringliteral"`创建可变副本。 8. **函数指针**:声明后,通过赋值语句如`typedef void (*func_ptr)(int); func_ptr my_ptr = my_function;`进行初始化。 9. **结构、联合和枚举**: - **结构声明**:`struct x1fg;`仅声明,`typedef struct fg x2;`创建别名。 - **自引用结构**:结构可以包含指向自身的指针,用于构建递归数据结构。 - **抽象数据类型**:通常通过将结构体定义为私有,并提供一组公共操作函数实现。 - **面向对象编程**:C语言不具备内置的继承机制,但可以通过组合和封装模拟。 - **结构内存技巧**:通过动态内存分配和结构体的嵌套,可以创建可变长度的数组,但需要注意内存管理。 这些问题是C语言学习过程中的常见挑战,掌握这些知识点有助于编写更高效、更健壮的C语言程序。