K&R C Note - Chapter 1 快速开始

Chapter 1 - A Tutorial Introduction

一个C程序,无论它的大小几何,都由函数与变量组成

1.1 开始

要素 作用
函数 functions 包含语句(Statement),以指定要执行的计算步骤
变量 variables 储存在计算工程中使用到的值
  1. 函数mian()是特殊的,程序将从mian()函数开始执行,这也意味着每个程序都必须有一个main().

  2. 程序第一行的#include <stdio.h>告知编译器将标准库的信息包含.

  3. 转义字符串(escape sequence)只表示一个单一的字符,它提供了一个用于表示har-to-type字符的通用拓展机制.

1.2 变量与算数表达式

  1. 在C言语中,一个变量必须在被声明(declared)之后才能被使用。变量的声明指定了变量的属性(properties).

  2. 由大括号(braces)围起的多个语句称为复合语句(compound statement),简称为语句块。语句块的结束无需和简单语句一样使用分号; .

1.3 For语句

  1. for语句是一种循环,是对于while语句的普遍化(generalization).
  2. 递增步骤(increment step)将在语句块执行完成后被执行.
  3. for通常适用于初始化语句和递增语句为简单语句并且逻辑相关的循环.

1.4 符号常量

  1. 让大量的幻数(magic number),如200、300充斥于程序中是很坏的习惯.
  2. 语句#define [name] [replacement list]可以使符号常量(symbolic constant)或符号名称(symbolic name)被替换为特定的字符串.

1.5 字符输入与输出

  1. 文本流(text stream)是被分割为数行的字符序列.
  2. EOF (End Of File) 是由标准库所定义的整形数.
  3. 计算行即意味着计算换行符(newline character).
  4. ||(or)与&&(and)所连接的表达式由左向右结合,被称为短路运算.
  5. 标准库提供了以下的简单函数用于读写字符:
    1. getchar() 用于从文本流中读取下一个输入字符并返回字符的值
    2. purchar(int) 用于打印指定值的对应字符

1.6 数组

  1. int arrays-name[int length]声明一个长度为length的数组,下标由0开始.
  2. 在最初的if语句与最后的else语句间,可以存在数个else if语句.

1.7 函数

  1. 函数的定义(defination)有如下形式:

    return-type function-name(parameter-declarations, if any)
    {
        declarations
        statements
        }
    
  2. 函数的声明(declaration)被称为函数原型(prototype),必须与函数的定义与用法一致,有如下形式:

    return-type function-name(parameter-declarations)
        /* 元素名是可选的(optional),这意味着它可以省略 */
    
  3. 函数的参数(parameters)所使用的变量名作用于函数内部.

  4. 函数并不必要返回一个值,return语句本身便可以如}一般控制程序终止(即使它不返回有效的值).

  5. 函数应当向环境返回它的运行状态.

1.8 实际参数(Arguments) - 传值调用

  1. 被传入调用函数实参的值由一个临时变量(temporary variables)而不是原始变量提供.
  2. 引用调用(Call by reference)指被调用的程序例与原始的实参相关联,而不是一个局部拷贝.
  3. 为了在调用程序例时修改变量值,调用者需要提供变量所处的内存地址(指针).被调用的函数也必须将该形参声明为一个指针并且通过它访问(access)原函数的值.
  4. 当一个数组的标识符被用作实参,被传递给函数的值是数组起始位置的地址,而不是数组的拷贝.

1.9 字符数组

  1. \0处于字符数组的结尾,用于标记字符串的结束. 换言之,没有\0的字符数组将不被C语言视为字符串.
  2. %f的格式规范要求对应的数组符合Char Char Char ... '\0'的形式.

1.10 外部变量与作用域

定义(Defination): 表示创建变量或分配储存单元.

声明(Declaration): 表示说明变量的属性,但并不分配储存单元.

  1. 每个局部变量只在函数被调用时开始存在并在函数结束后消失,这便是为何局部变量被称为自动变量(automatic variables)。
  2. 由于自动变量伴随函数的调用周期,它们并不会保留它们的值到下次调用,并且必须在每次进入时被明确的(explicitly)设置. 如果没有被设置,它们将包含垃圾数据.
  3. 外部变量(external variables)可以被全局访问. 要在函数内部访问它,可以由external语句明确地声明一个标识符是外部的,也可以由上下文所声明. 在C语言中,如果外部变量的定义出现在使用它的函数之前,函数中没有必要使用external声明,反之则必要.
  4. 在ANSI C 中,如果要声明空参数表,则必须使用关键字 void 进行显式声明. 为了与老版本 C 语言程序兼容,ANSI C 语言把空参数表看成老版本 C 语言的声明方式,并且对参数表不再进行任何检查。

本文作者: yakuback
版权声明: 本文使用 署名-非商业性使用-相同方式共享 许可协议. 如需转载,请您注明出处.

posted @ 2020-03-24 10:40  yakuback·归束  阅读(211)  评论(0编辑  收藏  举报