C语言基础教程:9 函数引入3

2493 人浏览 | 时间: 2015-09-01 14:58:58 | 作者: 那年

函数形参和实参概念的强调

函数入门的最后一讲啦,大家耐下性子好好学学。这讲我们来学学实参和形参。这两物究竟为何?别急,听我慢慢道来。(开场白真的写的很无力啊!)

可谓“杀鸡儆猴”这被杀的“”是给“”“看的”,那么映射到函数中的形式参数就是给“编译器”“看的”。对,就是这样的,别吃惊。你想想看,为什么要让猴眼睁睁的看着鸡被杀死?不就是告诉他“你这泼猴最好给我小心点,不然你也与这鸡一样,你要按照我的规矩办事”;好了,映射一下吧,函数的形式参数就是告诉编译器“以后看到这样的函数调用时,你就强制要求实际参数也一定要按照我(形式参数)所规定的那样,不然就给他点颜色看看(waring或者error 酌情考虑)”。

void test(int l)

{

       int k;

       k=l;

}

int main()

{

       test(1.1);

       return 0;

}

很清楚了吧,剖开来说就是编译器会根据函数形式参数的信息(比如有几个形式参数  形式参数的类型等等)去验证函数调用时的实际参数是否合法,然后根据“编译错误处理级别

如图 给警告或者错误,这其实是编译器在编译器“查错”的一种方式。好了,上面说了形式参数的作用,那么到底什么是形式参数呢?准确的回答应该是“函数声明时参数表中的那些都是形式参数”或者你会问“为什么不是函数定义时的形式参数表呢?”,恩,这的确是个好问题,下面来好好回答。

    不知道亲爱的读者是否还记得上一讲那边讲解声明和定义的区别,不记得的话也不要紧,回头再看一下便可。编译器只看函数声明,在函数调用时他只管实际参数是否合法。

    好了,形式参数讲完了。那么下面就说说实际参数呗。实际参数就是你调用函数时所传递的数据。

大家看下下面的程序就什么都明白了

void test(int l);//形式参数

int main()

{

       test(1);//实际参数

       return 0;

}

void test(int l)

{

       int k;

       k=l;

}

 

说点额外的知识,

函数也可以不声明,这在“远古时代”(具体哪个时代我也记不得了,暂且就这么称呼吧)是允许的,编译器会根据你第一次调用该函数时所传递的参数去猜测函数定义时的形式参数(这是很危险的行为);大家看图:

形式参数可以不用参数名,直接写参数类型就好了。

获取你会问,就这么点内容有必要专门开一讲吗?恩,我感觉很有必要,而且这主要是为了讲解后边的隐式类型转化时也稍微打点基础。

至此,函数的引入就完结了,期待大家一起与我学后边的更多内容