# 让我们开始 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 | 循环语句的循环条 |