"《C和指针》读书笔记.pdf"
这篇读书笔记主要涵盖了C语言的基础知识,特别是关于指针和程序编译执行的过程。以下是笔记中的关键知识点:
1. **注释与预处理指令**: 在C语言中,/* 和 */ 用于块注释,但它们不是完全安全的删除代码的方法。安全的逻辑删除代码应使用预处理指令 #if 0 和 #endif。
2. **函数与参数传递**: 在其他语言中,无返回值的函数被称为过程。在C语言中,数组作为参数传递时是以引用方式,即传递地址。标量和常量则是按值传递,但函数可以修改数组参数的元素,因为它们是通过地址传递的。
3. **字符串与NUL字符**: 字符串在C语言中以NUL字节结尾,它不被视为字符的一部分,而是作为字符串的结束标识。NULL则表示空指针。
4. **函数参数与数组**: 传递数组时,通常不需要指定长度,但函数内部应进行错误检查。例如,函数`int read(int a[], int len)`需要一个额外的参数来表示数组长度。
5. **使用scanf函数的注意事项**: 使用scanf时,输入值前的空白会被忽略,值后的空白表示结束。对于%s格式,中间不应有空白。此外,scanf对数组下标的有效性不做检查。
6. **整型变量与字符输入**: 当读取字符时,通常使用int类型变量,如`int ch`,这是因为EOF(文件结束标志)是一个整型值,这样做可以避免字符被错误解释为EOF。不过,这需要确保变量足够大以存储可能的EOF值。
7. **C语言的执行环境**: C语言的翻译过程分为编译和链接两个阶段,包括预处理、解析和可选的优化。执行阶段涉及程序加载、变量初始化和执行代码。在具有操作系统的环境中,程序加载和变量初始化通常由操作系统负责。
8. **程序执行与堆栈**: 执行过程中,程序使用运行时堆栈来存储函数的局部变量和返回地址。堆栈在函数调用时动态扩展和收缩。
这些知识点构成了C语言基础的核心,对于理解和编写C程序至关重要。通过深入理解这些概念,开发者能够更好地掌握C语言的特性和程序设计技巧。