C语言使用经验总结:常见问题与解答

需积分: 1 1 下载量 5 浏览量 更新于2024-07-26 收藏 1.35MB PDF 举报
本篇文章是对C语言使用经验的全面总结,作者是经验丰富的C语言编程大师Steve Summit,由朱群英和孙云翻译,并在2005年6月进行了修订。这本书旨在为学习者提供解决C语言常见问题的实用指导,包括但不限于数据类型选择、全局变量和函数声明、关键字的理解、指针操作、main函数的正确形式、未初始化变量的假设、字符串常量与动态内存分配、结构体、联合与枚举的概念、以及如何在C语言中模拟面向对象特性等。 1. 声明和初始化部分详细解释了如何根据具体需求选择整数类型,例如在64位系统上处理64位数据类型的方法。对于全局变量和函数,强调了清晰声明的重要性,同时解释了`extern`关键字在函数声明中的作用,以及`auto`的关键字用法。 2. 在处理链表问题时,讨论了为何结构体中不能直接包含指向自身类型的指针,并给出了可能的解决方案。复杂声明的技巧也得到了详尽讲解,如定义包含多个指针的函数指针数组。 3. 当遇到函数重定义错误时,文章分析了可能出现的问题,澄清了`main()`函数的正确原型应为`int main()`,而非`void main()`。 4. 对于未初始化变量的默认值,文章指出全局变量通常会被初始化为零,但并不意味着可以直接用作空指针或浮点零。此外,代码示例中`int f(){char a[] = "Hello,world!";}`不能编译的原因也被深入剖析。 5. 文中对字符串常量和动态内存分配的初始化问题进行了讨论,指出`char *p = malloc(10);`可能导致的“非法初始化”错误,并对比了`char a[] = "string literal";`和`char *p = "string literal";`之间的差异。 6. 结构体、联合和枚举的章节中,明确了`struct x1 {}`与`typedef struct {} x2;`之间的区别,探讨了结构体内部指针的可能性,并提出了在C语言中模拟抽象数据类型的最佳实践。关于面向对象特性,虽然C语言本身不是面向对象语言,但仍存在一些间接实现方法。 这本书不仅解答了C语言的基本疑问,还涵盖了高级技巧和注意事项,是学习和提高C语言能力的重要参考资料。