第1章 C语言概述
1. C语言出现的历史背景
2. C语言的特点
3. 运行C程序的步骤
第2章. 程序的灵魂——算法
1. 计算机算法可分为两大类别:
2. 结构化程序设计
第3章 数据类型、运算符、表达式
3. 整型常量表示方法
如:123, -456.4。
如:0123表示八进制数123,等于十进制数83,-011表示八进制数-11,即十进制数-9。
如:0x123,代表16进制数123,等于十进制数 291。 -0x12等于十进制数-10。
(1)算术运算符 (+ - * / %)
(2)关系运算符 (><==>=<=!=)
(3)逻辑运算符 (!&&||)
(4)位运算符 (<< >> ~ |∧&)
(5)赋值运算符 (=及其扩展赋值运算符)
(6)条件运算符 (?:)
(7)逗号运算符 (,)
(8)指针运算符 (*和&)
(9)求字节数运算符(sizeof)
(10)强制类型转换运算符( (类型) )
(11)分量运算符(.->)
(12)下标运算符([ ])
(13)其他 (如函数调用运算符())
第八章 函数
1. 静态存储方式与动态存储方式
所谓静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式。而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。这个存储空间可以分为三部分:
2.变量的声明与定义
对变量而言,声明与定义的关系稍微复杂一些。在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如:int a; ),另一种是不需要建立存储空间的(如:extern a;)。前者称为"定义性声明"(defining declaration) ,或简称定义(definition)。 后者称为"引用性声明"(referencing declaration)。广义地说,声明包括定义,但并非所有的声明都是定义。对"int a;" 而言,它既是声明,又是定义。而对"extern a;" 而言,它是声明而不是定义。
一般为了叙述方便,把建立存储空间的声明称定义,而把不需要建立存储空间的声明称为声明。显然这里指的声明是狭义的,即非定义性声明。例如:
(1) 从作用域角度分,有局部变量和全局变量。它们采用的存储类别如下:
局部变量
|静态局部变量(离开函数,值仍保留)
|寄存器变量(离开函数,值就消失)
|(形式参数可以定义为自动变量或寄存器变量)
全局变量
|外部变量(即非静态的外部变量,允许其他文件引用)
(2) 从变量存在的时间(生存期)来区分,有动态存储和静态存储两种类型。静态存储是程序整个运行时间都存在,而动态存储则是在调用函数时临时分配单元。
|自动变量(本函数内有效)
|寄存器变量(本函数内有效)
静态存储
|静态外部变量(本文件内有效)
|外部变量(其他文件可引用)
(3) 从变量值存放的位置来区分,可分为:
内存中静态存储区
|静态局部变量
|静态外部变量(函数外部静态变量)
|外部变量(可为其他文件引用)
内存中动态存储区:
自动变量和形式参数
CPU中的寄存器:
寄存器变量
(4) 关于作用域和生存期的概念。从前面叙述可以知道,对一个变量的性质可以从两个方面分析,一是变量的作用域,一是变量值存在时间的长短,即生存期。前者是从空间的角度,后者是从时间的角度。二者有联系但不是同一回事。
(5) static对局部变量和全局变量的作用不同。对局部变量来说,它使变量由动态存储方式改变为静态存储方式。而对全局变量来说,它使变量局部化(局部于本文件),但仍为静态存储方式。从作用域角度看,凡有static声明的,其作用域都是局限的,或者是局限于本函数内(静态局部变量),或者局限于本文件内(静态外部变量)。
第十章 指针
1. 多维数组
int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
表 示 形 式 |
含义 |
地 址 |
a |
二维数组名,指向一维数组a[0],即0行首地址 |
2000 |
a[0],*(a+0),*a |
0行0列元素地址 |
2000 |
a+1,&a[1] |
1行首地址 |
2008 |
a[1],*(a+1) |
1行0列元素a[1][0]的地址 |
2008 |
a[1]+2, *(a+1)+2, &a[1][2] |
1行2列元素a[1][2] 的地址 |
2012 |
*(a[1]+2), *(*(a+1)+2), a[1][2] |
1行2列元素a[1][2]的值 |
元素值为13 |
2. 字符数组和字符指针变量二者之间的区别:
(1) 字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),决不是将字符串放到字符指针变量中。
(2)赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。
char str[14];
str=″I love China!″;
而对字符指针变量,可以采用下面方法赋值:
char*a;
a=″I love China!″;
(3)对字符指针变量赋初值:
char *a=″I love China!″;等价于
char*a;
a=″I love Chian!″;
而对数组的初始化:
char str[14]={″I love China!″};
不能等价于
char str[14];
str[ ]=″I love China!″;
(4) 定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址。
例如: char str[10];
scanf(″%s″,str);
第十三章 文件操作
1.文件处理
缓冲文件系统:系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。用缓冲文件系统进行的输入输出又称为高级磁盘输入输出。
非缓冲文件系统:系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。用非缓冲文件系统进行的输入输出又称为低级输入输出系统。
说明:
在UNIX系统下,用缓冲文件系统来处理文本文件,用非缓冲文件系统来处理二进制文件。
ANSI C 标准只采用缓冲文件系统来处理文本文件和二进制文件。
C语言中对文件的读写都是用库函数来实现。
Turbo C在stdio.h文件中有以下的文件类型声明:
}FILE;
在缓冲文件系统中,每个被使用的文件都要在内存中开辟一
FILE类型的区,存放文件的有关信息。
FILE类型的数组:
FILE f[5];定义了一个结构体数组f,它有5个元素,可以用来存放5个文件的信息。
文件型指针变量:
FILE *fp;fp是一个指向FILE类型结构体的指针变量。可以使fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。如果有n个文件,一般应设n个指针变量,使它们分别指向n个文件,以实现对文件的访问。
3.文件读写结构体
若有如下结构类型:
可以用fread和fwrite来进行数据的操作:
4.fread与fscanf
注意:
用fprintf和fscanf函数对磁盘文件读写,使用方便,容易理解,但由于在输入时要将ASCII码转换为二进制形式,在输出时又要将二进制形式转换成字符,花费时间比较多。因此,在内存与磁盘频繁交换数据的情况下,最好不用fprintf和fscanf函数,而用fread和fwrite函数。