函数形参和实参概念的强调
函数入门的最后一讲啦,大家耐下性子好好学学。这讲我们来学学实参和形参。这两物究竟为何?别急,听我慢慢道来。(开场白真的写的很无力啊!)
可谓“杀鸡儆猴”这被杀的“鸡”是给“猴”“看的”,那么映射到函数中的形式参数就是给“编译器”“看的”。对,就是这样的,别吃惊。你想想看,为什么要让猴眼睁睁的看着鸡被杀死?不就是告诉他“你这泼猴最好给我小心点,不然你也与这鸡一样,你要按照我的规矩办事”;好了,映射一下吧,函数的形式参数就是告诉编译器“以后看到这样的函数调用时,你就强制要求实际参数也一定要按照我(形式参数)所规定的那样,不然就给他点颜色看看(给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;
}
说点额外的知识,
①函数也可以不声明,这在“远古时代”(具体哪个时代我也记不得了,暂且就这么称呼吧)是允许的,编译器会根据你第一次调用该函数时所传递的参数去猜测函数定义时的形式参数(这是很危险的行为);大家看图:
②形式参数可以不用参数名,直接写参数类型就好了。
获取你会问,就这么点内容有必要专门开一讲吗?恩,我感觉很有必要,而且这主要是为了讲解后边的隐式类型转化时也稍微打点基础。
至此,函数的引入就完结了,期待大家一起与我学后边的更多内容