1. 先声明后调用
先区分一下——函数调用是函数声明规定的,函数的计算是函数的定义规定的。
函数调用必须先进行函数声明,程序运行需要任何被调用的函数有定义。(毕竟不能计算机思,则程序在嘛)
所以总是需要先进行函数定义,才能进行函数声明,当然,也就只需要满足这个要求。
所以函数定义不一定要在程序的开头写,在你想要调用的时候写上就行。
就拿上一篇博文里的程序举例:
#include<iostream>
using namespace std;
int miaoMiao(int meow); //进行函数声明
int main(){
cout<<miaoMiao(2)<<"\n"; //函数调用
}
int miaoMiao(int meow){
return meow+meow*meow; //函数定义
}
这就是有返回值的函数调用,这种调用可以看做是一个表达式,其调用目的是为了直接获得计算结果,以输出流的形式输出结果。
2. 定义也可以包括着声明(我觉得这个功能很不错)
这也就是说函数的定义在内容上包含了函数的声明,在意义上也包含了函数的声明。所以可以有定义的情况下忽略掉声明(这时定义必须在声明之前,且由于main函数的特殊性,如果是main函数调用的,需要在main函数之前定义)。就比如:
#include<iostream>
using namespace std;
int miaoMiao(int meow){
return meow+meow*meow; //函数定义(代替声明)
}
int main(){
std:: cout<<miaoMiao(2)<<"\n"; //函数调用
}
3. 参数传递与匹配
在函数调用的时候,参数不含有类型说明,就只是数值而已,当然,其类型和对应函数声明中的参数类型相一致。
这个参数描述称为实际参数,简称为实参(实参和形参后面会开个帖,到时候把链接写上。)
举个例子,上面的miaoMiao(2)里的2就是实参。
而具有类型说明的函数声明或定义中的参数就叫做形式参数,简称形参。
就如,int a 就是形参,int称为形参类型,a称为形参名。
参数传递就是在函数调用中实参传递给函数体中的形参的过程。传递结束后,被调用的函数就能在运行中使用形参值。
就像是miaoMiao(2)中的2传递给了meow,让miaoMiao这个函数可以运行过程中运行函数体。
需要注意的是,参数传递是讲究类型匹配的,如果实参是int,而形参是double,也许可以带进去,但形参是double,实参是int,带进去可能就会直接报错。
4. 库函数
库函数就是编译器预先写好的函数,库函数有c函数和c++函数。c函数经过改造就可以成为对应的c++库函数。
就像在建模竞赛会用到的中的math.h就是c函数,但通过函数重载等操作,就可以生成c++函数cmath。
这里就举几个例子,字符串处理函数一般都在string.h中,标准输入/输出函数都在stdio.h中。一般我们调用这些库函数,就在开头声明头文件就可以调用了。