江湖车侠|C和指针:如何快速上手C语言( 二 )


1.1.2 预处理指令
江湖车侠|C和指针:如何快速上手C语言这5行称为预处理指令(preprocessor directives) ,因为它们是由预处理器(preprocessor)解释的 。 预处理器读入源代码,根据预处理指令对其进行修改,然后把修改过的源代码递交给编译器 。
在我们的例子程序中,预处理器用名叫stdio.h的库函数头文件的内容替换第1条#include指令语句,其结果就仿佛是stdio.n的内容被逐字写到源文件的那个位置 。 第2、3条指令的功能类似,只是它们所替换的头文件分别是stdlib.n和string.h.
stdio.h头文件使我们可以访问标准I/O库(Standard I/O Library)中的函数,这组函数用于执行输入和输出 。stdlib.h定义了EXIT_SUCCESS和EXIT_FAILURE符号 。 我们需要string.h头文件提供的函数来操纵字符串 。
江湖车侠|C和指针:如何快速上手C语言这些声明被称为函数原型(function prototype),它们告诉编译器这些以后将在源文件中定义的函数的特征 。 这样,当这些函数被调用时,编译器就能对它们进行准确性检查 。 每个原型以一个类型名开头,表示函数返回值的类型 。 跟在返回类型名后面的是函数的名字,再后面是函数期望接受的参数 。 所以,函数read_column_numbers返回一个整数,接受两个类型分别是整型数组和整型标量的参数 。 函数原型中参数的名字并非必需,我这里给出参数名的目的是提示它们的作用 。
rearrange函数接受4个参数 。 其中第1个和第2个参数都是指针(pointer),指针指定一个存储于计算机内存中的值的地址,类似于门牌号码指定某个特定的家庭位于街道的何处 。 指针赋予C语言强大的威力,我将在第6章详细讲解指针 。 第2个和第4个参数被声明为const ,这表示函数将不会修改函数调用者所传递的这两个参数 。 关键字void表示函数并不返回任何值,在其他语言里,这种无返回值的函数被称为过程(procedure) 。
江湖车侠|C和指针:如何快速上手C语言1.1.3 main函数
江湖车侠|C和指针:如何快速上手C语言这几行构成了main函数定义的起始部分 。 每个C程序都必须有一个main函数,因为它是程序执行的起点 。 关键字int表示函数返回一个整型值,关键字void表示函数不接受任何参数 。 main函数的函数体包括左花括号和与之相匹配的右花括号之间的任何内容 。
请观察一下缩进是如何使程序的结构显得更为清晰的 。
江湖车侠|C和指针:如何快速上手C语言这几行声明了4个变量:一个整型标量 , 一个整型数组以及两个字符数组 。 所有4个变量都是main函数的局部变量 , 其他函数不能根据它们的名字访问它们 。 当然 , 它们可以作为参数传递给其他函数 。
江湖车侠|C和指针:如何快速上手C语言这条语句调用函数read_column_numbers,数组columns和MAX_COLS所代表的常量(20)作为参数传递给这个函数 。 在C语言中,数组参数是以引用(reference)形式进行传递的,也就是传址调用,而标量和常量则是按值(value)传递的(分别类似于Pascal和Modula中的var参数和值参数) 。 在函数中对标量参数的任何修改都会在函数返回时丢失,因此,被调用函数无法修改调用函数以传值形式传递给它的参数 。 然而,当被调用函数修改数组参数的其中一个元素时,调用函数所传递的数组就会被实际地修改 。


推荐阅读