K&R C Note - Chapter 1 快速开始
Chapter 1 - A Tutorial Introduction
一个C程序,无论它的大小几何,都由函数与变量组成
1.1 开始
要素 | 作用 |
---|---|
函数 functions | 包含语句(Statement),以指定要执行的计算步骤 |
变量 variables | 储存在计算工程中使用到的值 |
-
函数
mian()
是特殊的,程序将从mian()
函数开始执行,这也意味着每个程序都必须有一个main()
. -
程序第一行的
#include <stdio.h>
告知编译器将标准库的信息包含. -
转义字符串(escape sequence)只表示一个单一的字符,它提供了一个用于表示
har-to-type
字符的通用拓展机制.
1.2 变量与算数表达式
-
在C言语中,一个变量必须在被声明(declared)之后才能被使用。变量的声明指定了变量的属性(properties).
-
由大括号(braces)围起的多个语句称为复合语句(compound statement),简称为语句块。语句块的结束无需和简单语句一样使用分号
;
.
1.3 For语句
for
语句是一种循环,是对于while
语句的普遍化(generalization).- 递增步骤(increment step)将在语句块执行完成后被执行.
for
通常适用于初始化语句和递增语句为简单语句并且逻辑相关的循环.
1.4 符号常量
- 让大量的幻数(magic number),如200、300充斥于程序中是很坏的习惯.
- 语句
#define [name] [replacement list]
可以使符号常量(symbolic constant)或符号名称(symbolic name)被替换为特定的字符串.
1.5 字符输入与输出
- 文本流(text stream)是被分割为数行的字符序列.
- EOF (End Of File) 是由标准库所定义的整形数.
- 计算行即意味着计算换行符(newline character).
- 由
||
(or)与&&
(and)所连接的表达式由左向右结合,被称为短路运算. - 标准库提供了以下的简单函数用于读写字符:
getchar()
用于从文本流中读取下一个输入字符并返回字符的值purchar(int)
用于打印指定值的对应字符
1.6 数组
int arrays-name[int length]
声明一个长度为length的数组,下标由0开始.- 在最初的
if
语句与最后的else
语句间,可以存在数个else if
语句.
1.7 函数
-
函数的定义(defination)有如下形式:
return-type function-name(parameter-declarations, if any) { declarations statements }
-
函数的声明(declaration)被称为函数原型(prototype),必须与函数的定义与用法一致,有如下形式:
return-type function-name(parameter-declarations) /* 元素名是可选的(optional),这意味着它可以省略 */
-
函数的参数(parameters)所使用的变量名作用于函数内部.
-
函数并不必要返回一个值,
return
语句本身便可以如}
一般控制程序终止(即使它不返回有效的值). -
函数应当向环境返回它的运行状态.
1.8 实际参数(Arguments) - 传值调用
- 被传入调用函数实参的值由一个临时变量(temporary variables)而不是原始变量提供.
- 引用调用(Call by reference)指被调用的程序例与原始的实参相关联,而不是一个局部拷贝.
- 为了在调用程序例时修改变量值,调用者需要提供变量所处的内存地址(指针).被调用的函数也必须将该形参声明为一个指针并且通过它访问(access)原函数的值.
- 当一个数组的标识符被用作实参,被传递给函数的值是数组起始位置的地址,而不是数组的拷贝.
1.9 字符数组
\0
处于字符数组的结尾,用于标记字符串的结束. 换言之,没有\0
的字符数组将不被C语言视为字符串.- 如
%f
的格式规范要求对应的数组符合Char Char Char ... '\0'
的形式.
1.10 外部变量与作用域
定义(Defination): 表示创建变量或分配储存单元.
声明(Declaration): 表示说明变量的属性,但并不分配储存单元.
- 每个局部变量只在函数被调用时开始存在并在函数结束后消失,这便是为何局部变量被称为自动变量(automatic variables)。
- 由于自动变量伴随函数的调用周期,它们并不会保留它们的值到下次调用,并且必须在每次进入时被明确的(explicitly)设置. 如果没有被设置,它们将包含垃圾数据.
- 外部变量(external variables)可以被全局访问. 要在函数内部访问它,可以由
external
语句明确地声明一个标识符是外部的,也可以由上下文所声明. 在C语言中,如果外部变量的定义出现在使用它的函数之前,函数中没有必要使用external
声明,反之则必要. - 在ANSI C 中,如果要声明空参数表,则必须使用关键字 void 进行显式声明. 为了与老版本 C 语言程序兼容,ANSI C 语言把空参数表看成老版本 C 语言的声明方式,并且对参数表不再进行任何检查。
本文作者: yakuback
版权声明: 本文使用 署名-非商业性使用-相同方式共享 许可协议. 如需转载,请您注明出处.