# 让我们开始 C 语言之旅

# C 语言的特点

C 语言是 AT&T 贝尔实验室的阿 D.M.Ritchie 在 1973 年推出的程序开发语言。

C 语言虽是高级编程语言,但它也具备了能够和汇编语言相匹配的低层处理功能。

AT&T 贝尔实验室开发的Unix,最初是用汇编语言写的,但后来大部分都用 C 语言进行了重写。

# 变量和函数

不管使用什么样的编程语言,程序内容都是由数据和处理构成的。至于程序的数据和处理具体该如何表示,则根据编程语言的不同而不同。在 C 语言中,数据用变量来表示,处理用函数来表示。

在 C 语言中,我们要从程序的角度来理解变量和函数,而不能从数学的角度来理解。例如 x、y、z 这些变量,在数学中是“变化的数值”的意思,但在程序中表示的则是“存放数值的地方”。 f(x) 这个函数,在数学中表示的是“变量 x 决定了这个函数的结果”,但从程序上来看则是“用 f 函数来处理 x 这个变量”。

数学中的等号(=)表示的意思是“相等”,而程序中的等号表示的则是赋值的意思。在 C 语言中表示相等时,要用两个连续的等号。

# 数据类型

在数学中,变量对位数和精度是没有任何限制的。与此相对的,在程序中,变量则受位数和精度的限制。这是因为,计算机的存储容量是有限的。

计算机中预先被定义过的位数和精度称为数据类型。C 语言中主要的数据类型如下表所示,其中, char、short、int 是整数用的数据类型。float 和 double 是小数用的数据类型。

名称 长度 精度
char 8 -128 ~ +127
short 16 -32768 ~ +32767
int 32 -2147483648 ~ +2147483647
float 32 -3.4 x 10^36 ~ +3.4 x 10^37
double 64 -1.7 x 10^206 ~ +1.7 x 10^207
int a; // 定义 int 类型的变量 a

a = 123; // 为变量 a 赋值 123

# 标准函数库

函数包括程序员自己写的函数以及系统提供的函数。其中,后者通常成为标准函数库。标准函数库是指具有可被各种程序使用的通用功能的函数。

# 函数调用

函数的括号中,除变量以外,也可以放置通过文字串、数值等指定的数据信息,这些统称为 参数。被作为函数的处理结果而返回的数值称为返回值。利用函数称为函数调用。

# 局部变量和全局变量

在函数模块中定义的变量,只能在该函数中使用。这样的变量就称为局部变量。

变量也可以在函数模块外进行定义,该变量称为全局变量。全局变量在程序的所有函数中都可用。

# 数组和循环

处理大量数据是计算机擅长的领域之一。例如,在求解100万个数据的平均值的时候,利用计算机瞬间就能完成。

在程序中表现大量数据时,通常会使用数组的形式。数据的全体数据用同一个名字来表示,数组各元素则通过从0开始的连续编号来区分。

# 其他语法结构

C 语言的语法结构是 ANSI 制定的。 ANSI 规定了入下所示的32个 C 语言的关键词。

关键字 描述
auto 声明自动变量
break 跳出当前循环
case 开关语句分支
char 声明字符型变量或函数
const 声明只读变量
continue 结束当前循环,开始下一轮循环
default 开关语句中的“其它”分支
do 循环语句的循环体
double 声明双精度变量或函数
else 条件语句否定分支(与 if 连用)
enum 声明枚举类型
extern 声明变量是在其它文件中声明
float 声明浮点型变量或函数
for 一种循环语句
goto 无条件跳转语句
if 条件语句
int 声明整型变量或函数
long 声明长整型变量或函数
register 声明寄存器变量
return 子程序返回语句(可以带参数,也可不带参数)循环条件
short 声明短整型变量或函数
signed 声明有符号类型变量或函数
sizeof 计算数据类型长度
static 声明静态变量
struct 声明结构体变量或函数
switch 用于开关语句
typedef 用以给数据类型取别名
union 声明共用数据类型
unsigned 声明无符号类型变量或函数
void 声明函数无返回值或无参数,声明无类型指针
volatile 说明变量在程序执行中可被隐含地改变
while 循环语句的循环条