C语言编程常见问题解答

需积分: 29 0 下载量 144 浏览量 更新于2024-07-25 收藏 1.34MB PDF 举报
"《你必须知道的495个C语言问题》是一个详细的C语言问题解答集合,由Steve Summit原著,朱群英和孙云翻译,2005年6月23日修订至0.9.4版。文档旨在帮助开发者更好地理解和避免在C语言编程中遇到的问题。" 在C语言编程中,遇到的问题种类繁多,涵盖声明和初始化、结构、联合和枚举等多个方面。以下是一些关键知识点: 1. **声明和初始化** - 整数类型的选用应根据需求来决定,如int、short、long、long long等,分别对应不同的位宽。 - 在64位系统上,64位类型通常包括`long`和`long long`,但具体依赖于实现。 - 全局变量和函数的最佳定义与声明应该清晰明了,避免命名冲突和作用域问题。 - `extern`关键字用于在函数声明中表明该函数定义在其他文件中。 - `auto`关键字在现代C++中已不再常用,但在旧代码中表示局部变量。 - 链表定义时,typedef可以简化类型声明,但要注意自我引用结构的正确性。 - 复杂声明的理解需要掌握类型层次,例如指针、数组和函数返回类型的组合。 - 单独的函数声明不能重复,非法重定义通常是由于头文件包含不当导致的。 - `main()`的正确定义通常是`int main(void)`或`int main(int argc, char *argv[])`,`void main()`不标准。 - 未初始化的变量值是不确定的,全局变量默认不是零,而是未定义的垃圾值。 - 字符串字面量不能赋值给未初始化的指针,需要先分配内存,如`char *p = malloc(sizeof(char) * 11); strcpy(p, "Hello, world!");` - 常见的初始化区别在于,字符数组会复制字符串,而指针仅存储字符串地址,对指针数组元素赋值可能导致段错误。 2. **结构、联合和枚举** - 结构声明`struct x1 {}`定义了一个匿名结构类型,`typedef struct {} x2;`定义了一个名为x2的结构类型别名。 - 结构类型后直接声明变量需要使用`struct`关键字,如`struct x xthestruct;`。 - 结构可以包含指向自己的指针,这在实现递归数据结构或自引用类型时很有用。 - 实现抽象数据类型(ADT)通常通过结构体结合指针和函数指针,隐藏内部实现细节。 - C语言不支持直接的面向对象编程特性,但可以通过结构和函数指针模拟类的行为。 - 使用结构的变长数组,如`struct name{int namelen; char namestr[1];}`,可以用来创建可变大小的字符串结构。 这些只是C语言问题集中的部分主题,每个问题都深入探讨了C语言的特定概念和陷阱,对于提升C语言编程技能和解决实际问题非常有帮助。