C语言编程常见问题解答

需积分: 11 2 下载量 122 浏览量 更新于2024-08-01 收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是一本关于C语言常见问题的集合,由Steve Summit原著,朱群英和孙云翻译,版本为0.9.4,发布于2005年。本书旨在帮助初学者深入理解和应用C语言,内容涵盖声明和初始化、结构、联合和枚举等多个方面的问题。 1. 声明和初始化 - 整数类型的选用应根据需求选择,如int、short、long long等,考虑存储空间和计算效率。 - 在64位系统上,64位类型如`long`或`long long`是64位宽的。 - 全局变量和函数应在头文件中声明,在实现文件中定义,避免命名冲突。 - `extern`关键字用于在其他源文件中引用已定义的外部变量或函数。 - `auto`关键字在现代C++中不再常用,但在旧代码中可能表示局部变量。 - 结构体可以包含指向自身的指针,但需要正确处理指针和内存分配。 - 非法声明通常与嵌套的指针和数组有关,需要正确解析声明的层次。 - 重复定义错误可能是由于包含头文件时的多重包含,需用预处理器指令`#ifndef/#define/#endif`避免。 - `main()`函数的标准定义是`int main(void)`,但允许其他形式,如`void main()`不推荐使用。 - 未初始化的变量值不确定,不应依赖其默认为零,全局变量会自动初始化,但可能是任意值。 - 字符串字面量不能直接赋给非数组指针,需要分配内存后赋值,如`char *p = malloc(sizeof(char) * 11); strcpy(p, "Hello, world!");` - 初始化数组和指针的区别在于,数组可以直接初始化字符串,而指针需要动态分配内存并复制字符串。 2. 结构、联合和枚举 - `struct x1 {};`是声明一个结构类型,`typedef struct {} x2;`则是创建别名,两者用法略有不同。 - 结构体后面的`thestruct`语法错误,应为`struct x theStruct;`。 - 结构可以包含指向自身的指针,用于构建递归数据结构,如链表、树等。 - 实现抽象数据类型(ADT)通常通过结构体和访问函数(指针)实现封装。 - C语言本身不支持面向对象编程,但可以通过结构体和函数指针模拟类和继承的效果。 - 使用结构体时,如`struct name { int namelen; char namestr[1]; };`,`namestr[1]`用于动态增长字符串,但需要注意内存管理。 本书详细解答了C语言中的各种常见问题,适合C语言初学者和有一定基础的开发者查阅,帮助解决实际编程中遇到的困惑,提升C语言编程技能。"