"教你说中文"
这篇文档虽然标题是"教你说中文",但实际上内容是关于C语言编程的问题集。作者Steve Summit和翻译者朱群英、孙云提供了对C语言中常见问题的解答,涵盖了声明与初始化、结构、联合和枚举等多个方面。以下是这些知识点的详细说明:
1. 整型类型的选用:在C语言中,整数类型有多种,如int、short、long和long long。选择哪种类型取决于所需的数值范围和平台(32位或64位)。
2. 64位类型的解释:在64位系统上,64位整数类型如long和long long通常占用8个字节。
3. 全局变量与函数的声明:全局变量在整个程序中可见,而函数的声明应在使用之前进行,以确保编译器知道函数的存在和参数类型。
4. extern的作用:extern关键字用于声明一个在其他地方定义的变量或函数,告诉编译器该实体存在于别处。
5. 关键字auto:在现代C++中,auto用于推断变量类型,但在C语言中,它的作用不明显,通常用于旧的局部变量声明。
6. 自引用结构体:C语言允许结构体包含指向自身的指针,这在实现链表和其他自引用数据结构时很有用。
7. 复杂声明的理解:C语言的声明解析遵循"右到左"规则,理解复杂声明需要从右开始,依次确定类型和变量。
8. 函数重定义:如果函数只定义了一次,但编译器报错,可能是由于多次声明或包含头文件导致的重复声明。
9. main()函数定义:标准C规定main()函数的返回类型为int,void main()不被所有编译器接受。
10. 未初始化的变量:未初始化的局部变量的值是不确定的,全局变量默认会被初始化为0,但不能假定它们是空指针或浮点零。
11. 字符数组与字符串:f()函数中的字符数组声明需要分配足够的空间来存储"Hello,world!",否则编译器会报错。
12. malloc与初始化:malloc分配的内存需要手动初始化,直接赋值给指针会导致编译错误,因为malloc返回的是未初始化的内存地址。
13. 字符串常量与字符数组:字符数组可以修改,而字符串常量不能。对p[i]赋值可能导致程序崩溃,因为p指向的是字符串常量。
14. 函数指针的声明与初始化:声明函数指针时,指定其返回类型和参数列表,初始化时应指向一个具体的函数。
15. 结构、联合与枚举:结构体用于组合不同类型的数据,联合允许共享内存,枚举提供命名常量。声明struct x1{};和typedef struct {} x2;的主要区别在于使用时的语法。
16. 结构体自引用:结构体可以包含指向自身的指针,用于构建递归数据结构。
17. 抽象数据类型:在C语言中,通过typedef和结构体可以实现抽象数据类型,隐藏实现细节。
18. 面向对象特性:C语言本身不支持面向对象编程,但可以通过结构体和函数指针模拟类和方法。
以上就是文档中涉及的C语言编程知识要点,包括类型选择、变量初始化、声明规则、数据结构设计等方面,这些都是编写高效、可靠的C程序所必需的基础知识。