《21天学通C语言》读书笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* ====================================== *
* Copyright (c) 2005 Tsinghua University *
* Name: 《21天学通C语言》读书笔记 *
* Author: Zou Xin *
* ====================================== */
* -------------------------------- *
* 第 4 天课程 语句、表达式和运算符 *
* -------------------------------- *
> 要将字面字符串常量放在多行中,必须在换行之前加上反斜杆(\)。
例如:
printf("Hello,
world!");//F
printf("Hello,\
world!");//T
> w * x / ++y + z / y //在编程中,应避免使用这种不确定的表达式
* ---------------------------- *
* 第 5 天课程 使用函数封装代码 *
* ---------------------------- *
> 内联函数
内联函数通常很短。编译器将尽可能使内联函数的执行速度最快,这可能通过将函数的代码复制到调用函数中来实现。由于将在调用函数中执行这种函数的代码,因此称为“内联”。
The inline specifier instructs the compiler to replace function calls with the code of the function body.
* ------------------------------ *
* 第 6 天课程 基本的程序流程控制 *
* ------------------------------ *
> for 语句的工作原理
for (initial; condition; increment)
statement;
假 -> for 语句结束
执行表达式initial -> 判断condition -〈 〉-> 执行表达式increment
真 -> 执行statement语句
> 与while语句不同,do...while循环体中的语句至少执行一次
* ------------------------ *
* 第 7 天课程 信息读写基础 *
* ------------------------ *
> 要打印一个百分号,必须使用两个百分号%%
> puts()函数接受一个字符串参数,显示该参数并自动换行。而且puts()的开销较printf()小。
> 三字符序列(e.g. "??=" 对应的字符为 "#")
* ------------------------ *
* 第 8 天课程 使用数值数组 *
* ------------------------ *
> 对于大多数编译器来说,不能使用const关键字定义的符号常量来指定元素数目:
const int MONTHS = 12;
int array[MONTHS];/* wrong! */
* ---------------- *
* 第 9 天课程 指针 *
* ---------------- *
> 指针变量之间可以进行算术求差运算,即将两个指针相减。例如下面的表达式告诉你两个元素之间的距离(它们之间的元素数):
ptr1 - ptr2;
此外,指针变量之间也可以进行比较( !=、==、> 、< 、>= 、<= )。
> 注意事项:不要在赋值语句的左边使用未被初始化的指针变量,这可能会造成严重的后果。
* ------------------------- *
* 第 10 天课程 字符和字符串 *
* ------------------------- *
> 使用完 malloc() 函数分配的内存后,应使用 free() 函数将其返回给系统。
> scanf() 函数的返回值为成功输入的字符串数目
* ---------------------------------- *
* 第 11 天课程 结构、共用体和TypeDef *
* ---------------------------------- *
> 如果p_str是指向结构str的指针,则下面的三个表达式是等价的:
str.memb
(*p_str).memb
p_str->memb
> 与其他数据类型一样,也可以将结构体作为参数传递给函数。
> 为了避免混淆,只允许初始化共用体的第一个成员。
> 可以使用关键字typedef给结构体或共用体类型创建别名。方法如下例:
typedef struct
{
int x;
int y;
}coord;
coord topleft;
coord bottoright;
* ----------------------- *
* 第 12 天课程 变量作用域 *
* ----------------------- *
> 如果没有显示地初始化外部变量,那么在定义外部变量时,编译器将把它初始化为0。
> extern关键字指出“该函数使用了一个在其他地方定义的外部变量,其名称是什么,
类型是什么。”
> 静态变量只在函数首次被调用时初始化一次,以后调用时,程序知道该变量已被初始
化,因此不会再次初始化,而变量仍为前一次退出函数时的值;而对于动态变量,每次
函数被调用时,都会被初始化为指定的值。
> 常规外部变量对于其所在文件中的所有函数而言都是可见的,同时其他文件中的函数
也可以使用它;而静态外部变量只位于它所在的文件中,且在它的定义之后的函数中可
见。
> 寄存器变量(register)
关键字register只能用于简单的数值变量,而不能用于数组和结构体。另外,它也不能
用于静态变量和和全局变量。您不能定义指向寄存器变量的指针。
> 不要在main()函数中声明静态局部变量,因为这样做毫无意义。
> 在局部变量的作用域内,程序将暂时忽略全局变量。
* ----------------------------- *
* 第 13 天课程 高级程序流程控制 *
* ----------------------------- *
> break & continue
| ------------------ |
|while (...) <----|--|