C语言常见问题解答大全

需积分: 45 2 下载量 141 浏览量 更新于2024-07-29 收藏 1.37MB PDF 举报
"495个C语言常见问题.pdf 是一本涵盖了C语言编程中常见问题的集合,由Steve Summit原著并由朱群英和孙云翻译。这本书详细解答了关于声明与初始化、结构、联合和枚举等多个方面的疑惑,旨在帮助读者深入理解和应用C语言。" 1. **声明和初始化** - 在选择整数类型时,应考虑存储需求和效率,例如int通常用于常规计算,long或long long用于大整数,short则用于节省空间。 - 在64位系统上,64位类型如`long`或`long long`通常为64位,但具体取决于编译器和平台。 - 全局变量和函数最好在头文件中声明,在实现文件中定义,以避免命名冲突和重复定义。 - `extern`在函数声明中表示该函数是在其他地方定义的,提醒编译器函数的实现将在别处找到。 - `auto`关键字在现代C语言中主要用于旧代码,它指示变量在块级作用域中被声明。 - 链表的typedef结构可以包含指向自身的指针,但需要注意语法正确性,避免循环引用导致的编译错误。 - 解读复杂声明的关键是理解指针、数组和函数的关系,以及它们的嵌套层次。 - 非法重定义通常是由于未包含头文件保护或多次定义同一实体。 - `main()`的规范定义是`int main(void)`或`int main(int argc, char *argv[])`,`void main()`不标准但某些编译器可能接受。 - 未初始化的变量的值是不确定的,不应依赖其初始值。全局变量默认不初始化,局部变量未初始化时含有随机值。 - 使用`malloc`分配内存后,需要确保赋值操作的合法性,如`char *p = (char *)malloc(10); p[0] = 'a';`。 - 字符串字面量和字符数组有本质区别,前者是常量,不能修改;后者可以修改,如`char a[] = "stringliteral"; a[0] = 'H';`。 2. **结构、联合和枚举** - 声明`struct x1{};`定义了一个结构类型,而`typedef struct {} x2;`创建了一个名为x2的类型别名。 - 结构体后直接跟结构名是非法的,应使用`struct x xthestruct;`来声明结构变量。 - 结构可以包含指向自身的指针,这是实现递归数据结构的基础,如链表或树。 - 在C中实现抽象数据类型通常通过结构体和指向结构体的函数指针来封装实现细节。 - C语言本身不支持面向对象编程,但可以通过结构体模拟类,使用函数指针模拟方法,达到类似的效果。 - 代码`struct name { int namelen; char namestr[1]; };`定义了动态大小的字符串结构,`namestr[1]`用于自动扩展。 这本书详细解答了C语言中的495个问题,是学习和解决C语言编程困惑的重要参考资料。通过这些问题,读者可以深入理解C语言的核心概念和常见陷阱,提升编程技能。