Updating…
温故而知新,可以为师矣。
引言
- 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(在采用对二的补码的机器上)。