Updating…
温故而知新,可以为师矣。

《The C Programming Language》
《The C Programming Language》

引言

  • C 语言是在 UNIX 系统上开发的
  • 无论是 UNIX 系统本身还是其上运行的大部分程序,都是用 C 语言编写的
  • 除了由函数局部变量提供的静态定义和堆栈外,C 语言没有定义任何存储器分配工具,也不提供堆和无用内存回收工具
  • C 语言本身没有提供输入/输出功能,没有READWRITE语句,也没有内置的文件访问方法
  • 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 双精度浮点类型

shortlong两个限定符用于限定整型。short类型通常为 16 位long类型通常为 32 位,而int类型通常为 16 位或 32 位

  • shortint类型至少为 16 位
  • long类型至少为 32 位
  • short类型不得长于int类型
  • int类型不得长于long类型

类型限定符signedunsigned可用于限定char类型或任何整型。unsigned类型的数总是正值或 0。

例如,如果char对象占用 8 位,那么unsigned char类型变量的取值范围为 0~255,而signed char类型变量的取值范围为 -128~127(在采用对二的补码的机器上)。