**
什么是函数
在《C++Primer》中对于函数这样说道:
函数是一个命名了的代码块,我们通过调用函数执行相应的代码,函数可以有0个或者多个参数,而且会产生一个结果
总结:
我觉得函数可以说是一个能够实现一定功能的盒子,把他需要的工具放进去,他给你返回一个结果,可以说函数的内部是一个未知的东西,我们只需要知道这个函数能实现什么样的功能就行了,不需要去知道里面的代码怎么写的。
**为什么使用函数
当一个项目或者代码全部紧挨在一起的话,会显得开发十分繁杂,比如一个源文件的main函数中写了很多的代码,前20行实现一个功能,接下来100行实现另一个功能,再300行又实现一个功能…,这样下去,在一个main函数中零零散散地实现了很多功能!但是,过几天反过来再来看源代码,感觉就是脑袋一翁,一个main函数里面写了好几百行代码,不知道这些东西是什么,这样的开发会造成效率的丧失,会让我们没有思路,所以将一个个功能用一个个的函数封装起来,并做好注释,会节省我们很多的开发时间,使得代码可读性,容错性都会大大提高,所以一个良好的使用函数和注释的习惯是一个程序员必备(可以这么说)的品质**
一个函数由以下部分组成
返回类型+函数名(参数列表){代码块}
比如一个代码,求两个数的和并输出
#include
int main(){
int a,b;
std::cin>>a>>b; //输入两个数的值
int count = a+b;//count为a+b之后的值
std::cout<<“两数之和为:”<<count<<‘\n’; //输出计算得到的值
return 0;
}
在上面的代码中,再main函数中定义了一个求两数之和的程序,所有的计算代码都在main函数里面,下面我们对其加法功能进行一个封装
#include
void addData(int a,int b){
int count = a+b;//count为a+b之后的值
std::cout<<“两数之和为:”<<count<<‘\n’; //输出计算得到的值
}
int main(){
int a,b;
std::cin>>a>>b; //输入两个数的值
addData(a,b);
return 0;
}
我们将求和并输出的代码封装到了一个函数addData中,可以说addData就是实现一个两数相加并输出的功能,对于之后还需要进行两数相加的操作,我们不需要重复地写相加输出代码,只需要调用addData即可,这样不仅提高了代码的可读性,将不同功能进行了区分,而且减少了代码的重复书写,对于一些经常要用到的代码操作,使用函数将这个功能封装起来是一个很好的方法!
**在函数的编写格式中,在函数名的后面的括号里放入的参数是形式参数
返回类型+函数名(形参列表){…}
上面的代码中,在int addData(int a,int b)里面,这里面的a,b是一个形式参数,可以这么理解,现在这些参数a,b的具体值我不知道。我只知道他是一个整型变量,当在运行函数调用时,传入的才是实际参数,比如main函数中的addData(a,b),此时的a,b是我们输入的已经初始化了的函数,将实际参数放入函数的过程叫做传递参数,即传递具体的值给函数的形式参数,进行特定的操作,它就类似于一个公式一样,你必须给定实际的值,才能得到实际的结果,在传递参数的过程中需要注意几点
传入的实际参数必须跟形式参数的类型一样
传入的实际参数必须是按照顺序传递的
传入的实际参数的数量必须与形式参数的数量相同
//比如前面的addData**
**
addData(3,2); //正确–传递的数量正确
addData(3.0,2); //正确–3.0会强制转换为int类型
addData(“321”);//错误–传递的类型不正确
addData(2,3,1);//错误–传递的参数数量不对
**
每一个形参之间必须用逗号隔开,并注明类型
可以不定义形式参数
形式参数可以是任何基本类型或者本身定义的类型,可以是指针,引用,值
**
int fun();//正确–隐式的定义无形式参数
int fun(void);//正确–显示的定义无形式参数
int fun(int a,b);//错误–每一个形式参数前都要有一个变量类型
int fun