预览

在这节我准备了C的一些基本特性。C的特性很少,并且语法很简单。但这不意味着它简单。所有的东西都藏在表面之下。因此我们会很快地浏览它的特性和语法,然后开始看看深入地东西。

这节的目的是让大家都有同样地背景知识。如果你是刚接触C的应该多看一下这节,要是有过些使用C的经验那么你只需快速浏览一下就好。

Programs Useful for the theatre

程序

C程序只需要考虑函数定义和结构体的定义。

源文件只是一个函数和类型的列表。这些函数可以调用任何其它的函数或者它自己,也可以使用所有声明的数据类型或者内建的类型。

也可以调用其它库的函数,或者使用其中的数据类型,这就是C复杂的原因。

看到到得,C程序的执行总是从main函数开始的。从这里开始调用更多地函数,并完成我们想要的其它表现。

变量

在C语言中函数是用来操作变量的。这些变量就是我们命名后的数据。

C中每个变量都有明确地类型。这些类型是我们自己声明或者语言内建的。通过类型加名字以及可选的初始值来声明新变量。C中所有的语句结束都采用分号。

创建一个叫count的int型变量是这样的...

int count;

或者声明并赋初值...

int count = 10;

下面是一些内建类型的描述和例子。

关键字 描述 例子
void 空类型
char 单个字母 char last_initial = 'H';
int 整型 int age = 23;
long 长整形(可以存更大数值的整数) long age_of_universe = 13798000000;
float 浮点型 float liters_per_pint=0.568f;
double double型比float存更精确地小数 double speed_of_swallow=0.01072896;

函数声明

函数是一个操作变量的操作,并且可以选择控制程序的状态。它接受一些变量作为输入并返回单个变量作为输出。

函数声明方式是先写返回值类型,函数名,然后再括号中写上函数接受的参数列表,参数间用逗号隔开。函数内容是在大括号中写着,包括所有的语句和函数调用.return 是让函数结束并返回一个变量作为输出。

比如下面这个例子是就是接受俩个int 型参数并把它们相加。

    int add_together(int x, int y){
        int result = x + y;
        return result;
    }

通过名字加参数调用函数,比如下面就是调用上面这个函数的例子:

int added = add_together(10, 18);

结构体声明

结构体是用来声明新类型的。结构体是多种类型变量打包在一起。

因此可以用结构体来呈现更多复杂的数据类型。比如可以建一个叫point的结构体表示二维世界的点,它包含两个float类型的值分别叫x y。可以像下面这样声明。

  typedef struct{
    float x;
    float y;
  }point;

结构体的声明应该在使用前。它和内建的类型没有区别,使用起来也是一样的。通过.访问它的内部成员,像下面这样:

    point p;
    p.x = 1.0;
    p.y = 10.0;
    float length = sqrt(p.x*p.x + p.y*p.y);

指针

指针是普通类型的变化,其中类型名称跟在星号后面。比如可以像int*声明一个整型指针。我们已经见过char** argv这样的指针类型了。这是一个指向字符型指针的指针。

指针和其它类型变量完全不同。这是C语言最难得一部分,我们会在后面的章节中详细介绍它的更多细节。现在我们不需要知道它的细节,只要知道它的存在就好了,不要被它吓跑了。

Pointer A short haired one

字符串(Strings)

在C语言中string是由char*指针表示的。指针指向的是一串字符(char),结尾的字符是一个叫null的字符。字符串在C中是比较复杂也是比较重要的一个部分,下章中我们会学习怎么高效的使用它。字符串可以通过在双引号中添加字符来声明。现在记着如果你看到char*,那么你可以把它看做string。

条件

条件表达式让代码可以在满足特定条件下才运行。

可以使用if表达式让代码在满足特定条件时运行。if加括号中的条件,再加一个大括号包裹着要执行的语句。if表达式可以加可选的else表达式。else后面的语句在不满足if条件时执行。

在条件判断是可以用||&&与 这样的逻辑操作符连接多个条件。

在条件表达式中非0表示真。这点一定要记住。

如果要判断x是比10大,比100小,可以像下面这样:

  if (x >10 && x < 100){
    puts("x is greater than 10 and less than 100!")
  }else{
    puts("x is greater than 99 or less than 11!")
  }

循环

循环允许代码可以在某些条件为假之前一直重复运行。

在C中有两种主要的循环。第一种是while循环。这种循环在指定条件为假之前一直重复运行,比如下面这个例子是从10数到1得循环:

  int i = 10;
  while (i > 0) {
    puts("Loop Iteration");
    i = i - 1;
  }

第二种循环是for。除了条件外,这种循环需要用分号隔开的三个表达式。它们分别是初始值,条件,增量。初始值是在循环开始前执行的。条件判断是每次循环都会检测的一但结果为假就结束循。增量是在每次循环结束后执行的。这种循环往往用来执行比while更复杂的循环。

比如说一个从0数到9的循环可以这样写。i++表示给i的值加1。

  for (int 1 = 0; i<10, i++){
    puts("Loop Iteration");
  }