Updating…
温故而知新,可以为师矣。
《The C Programming Language》
引言
- C 语言是在 UNIX 系统上开发的
- 无论是 UNIX 系统本身还是其上运行的大部分程序,都是用 C 语言编写的
- 除了由函数局部变量提供的静态定义和堆栈外,C 语言没有定义任何存储器分配工具,也不提供堆和无用内存回收工具
- C 语言本身没有提供输入/输出功能,没有
READ或WRITE语句,也没有内置的文件访问方法 - C 语言只提供简单的单线程控制流,不提供多道程序设计、并行操作、同步和协同例程
- 1983 年,美国国家标准协会(ANSI)成立了一个委员会以制定一个现代的、全面的 C 语言定义,最后的结果就是 1988 年完成的 ANSI 标准,即
ANSI C
第 1 章 导言
符号常量
#define指令可以把符号名(或称为符号常量)定义为一个特定的字符串:
#include <stdio.h>
#define LOWER 0 /* 表的下限 */
#define UPPER 300 /* 表的上限 */
#define STEP 20 /* 步长 */
EOF定义在头文件<stdio.h>中,是一个整型数。其具体数值是什么并不重要,只要它与任何char类型的值都不相同即可。
传值调用
在 C 语言中,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中。被调用函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。
字符数组
getline函数把字符\0(即空字符,其值为 0 )插入到它创建的数组的末尾,以标记字符串的结束。这一约定已被 C 语言采用:当在 C 语言程序中出现类似于"hello\n"的字符串常量时,它将以字符数组的形式存储。
| h | e | l | l | 0 | \n |
\0 |
|---|---|---|---|---|---|---|
| 换行符 | 空字符 |
外部变量与作用域
除自动变量外,还可以定义位于所有函数外部的变量。
外部变量必须定义在所有函数之外,且只能定义一次,定义后编译程序将为它分配存储单元。在每个需要访问外部变量的函数中,必须声明相应的外部变量,此时说明其类型。声明时可以用extern语句显式声明。
#include <stdio.h>
#define MAXLINE 1000
int max;
char line[MAXLINE];
char longest[MAXLINE];
int getline(void);
void copy(void);
main() {
int len;
extern int max;
extern char longest[];
...
}
某些情况下可以省略
extern声明:在源文件中,如果外部变量的定义出现在使用它的函数之前,那么在那个函数中就没有必要使用extern声明。
第 2 章 类型、运算符与表达式
变量名
- 名字是由字母和数字组成的序列,但其第一个字符必须为字母
- 由于库例程的名字通常以
_开头,因此变量名不要以_开头 - 在传统 C 语言用法中,变量名使用小写字母,符号常量全部使用大写字母
数据类型及长度
| 数据类型 | 说明 |
|---|---|
| char | 字符型,占用一个字节,可以存放本地字符集中的一个字符 |
| int | 整型,通常反映了所用机器中整数的最自然长度 |
| float | 单精度浮点类型 |
| double | 双精度浮点类型 |
short和long两个限定符用于限定整型。short类型通常为 16 位,long类型通常为 32 位,而int类型通常为 16 位或 32 位。
short与int类型至少为 16 位long类型至少为 32 位short类型不得长于int类型int类型不得长于long类型
类型限定符
signed与unsigned可用于限定char类型或任何整型。unsigned类型的数总是正值或 0。例如,如果
char对象占用 8 位,那么unsigned char类型变量的取值范围为 0~255,而signed char类型变量的取值范围为 -128~127(在采用对二的补码的机器上)。