### C Primer Plus 读书笔记知识点总结 #### 一、`scanf()`与`gets()`的使用区别 - **`scanf()`特点**: - 当遇到第一个空白字符(如空格、制表符或换行符)时停止读取。 - 自动在字符串末尾插入空字符`\0`。 - 使用`%s`格式说明符时,只会读取一个单词而非整个句子。 - **`gets()`功能**: - 可用于读取包含空格的字符串,不会在遇到空白字符时停止。 - 更适合读取含有多个单词的句子。 #### 二、字符串常量与字符常量的区别 - **字符串常量 `"x"`**: - 属于派生类型(char数组)。 - 实际上包含两个字符:`'x'` 和空字符 `\0`。 - **字符常量 `'x'`**: - 属于基本类型(char)。 - 仅表示单个字符 `x`。 #### 三、`strlen()`与`sizeof()`的区别 - **`strlen()`**: - 计算字符串的实际长度(不包括`\0`)。 - 适用于字符串长度的计算。 - **`sizeof()`**: - 计算变量或数据类型的字节大小。 - 包括字符串中的`\0`字符在内的总字节数。 #### 四、符号常量的定义及其重要性 - **定义符号常量的方式**: - 使用`#define`宏定义。 - 使用`const`关键字。 - **示例**: - 使用`#define PI 3.14159`定义π的值。 - 使用`const float pi = 3.14159;`定义只读常量π。 - **优点**: - 提高代码的可读性和维护性。 - 方便在多处使用相同数值时进行修改。 #### 五、整数和浮点数限制头文件 - **`<limits.h>`**: - 定义了整数的最大最小值等限制。 - 示例: - `INT_MAX`:最大int值。 - `INT_MIN`:最小int值。 - **`<float.h>`**: - 定义了浮点数的最大最小值等限制。 - 示例: - `FLT_MAX`:最大float正常值。 - `FLT_MIN`:最小float正常值。 - **示例程序**: ```c #include <stdio.h> #include <limits.h> #include <float.h> int main(void) { printf("Max int value on this system: %d\n", INT_MAX); printf("Min int value on this system: %d\n", INT_MIN); printf("Max float normal value on this system: %e\n", FLT_MAX); printf("Min float normal value on this system: %e\n", FLT_MIN); return 0; } ``` #### 六、浮点转换与内存布局 - **不匹配的浮点转换实例**: - `float`类型在内存中通常占用4字节,而`double`类型通常占用8字节。 - 在使用`printf()`函数时,如果转换说明符与实际数据类型不匹配,可能会导致读取错误的结果。 - 示例: - `%ld`格式说明符尝试读取`long integer`(通常为4字节),但在处理`float`到`double`转换时,可能导致错误解析。 #### 七、`printf()`函数的返回值 - **返回值含义**: - 正常情况下返回打印的字符数量。 - 发生错误时返回负数。 - **示例程序**: ```c #include <stdio.h> int main(void) { int test = 123; int retvalue; retvalue = printf("the test value is %d\n", test); printf("The printf() function printed %d characters.\n", retvalue); return 0; } ``` #### 八、`scanf()`与输入项之前的空格 - **`scanf()`行为**: - 大多数格式说明符(除`%c`外)会自动跳过输入项之前的空格。 - 示例: - 输入`3`时,输出结果为`3`,不会包含输入时的空格。 通过上述总结,我们可以了解到《C Primer Plus》一书中关于C语言的一些基础且重要的知识点,这些内容对于初学者理解和掌握C语言的基础语法和编程实践非常有帮助。



























