《21天学通C语言》读书笔记

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 (...) <----|--|

相关文档
最新文档