函数的学习与总结
经过这半个月的学习,我对C++中的函数有了一个初步的理解。在我的认识中,C++中的函数实际上就是一种针对某种问题的解决方案,本质上就是一种算法。正如数学中一般,我们会为了解决某个问题写出解析式,然后向解析式中带值。在C++中,我们也需要为解决某个问题写出算法,然后向里面带参数。
#include<iostream>
using namespace std;
int f(int&);函数原型,定义函数名;
int main()
{
int n;
cin>>n;此处n有具体值,为实参;
f(n);调用函数;
cout<<n;
return 0;
}
int f(int &m)函数定义,此处m为形参,传参方式为引用传值;
{
int x,t=0,j;
j=1;
while(m/j!=0)
{
x=(m/j)%10;
t=10*t+x;
j=10*j;
}
m=t;
}
在函数中参数分为形参与实参,二者都为变量。其中形参便犹如数学中f(x)=2x+1中的x,而实参则是我们向解析式中带入的具体值。函数中实参向形参传递方式主要有三种,分别是按值传递、地址传递与引用传递。传递方式可根据形参判断。
按值传递仅仅是将实参的数据值传递给形参,在被调用的函数中形参可改变,但对实参无影响。定义方式可为int f(int t);
地址传递是将实参的地址值传递给形参,这是形参是指针,即让形参的指针指向实参地址,这里不再是将实参的一个副本拷贝给形参,而是让形参直接指向实参。这时调用函数中形参的变化将影响实参的改变。定义方式可为int f(int *p);
引用传递可理解为给实参取一个别名,如果以引用为参数,则既可以使得对形参的任何操作都能改变相应的数据,又使得函数调用显得方便、自然、更省空间。这是最简便的方式。定义方式可为int f(int &m)。
注意:再说明变量中用"*"是定义指针变量,用"&"为引用别名;
在正常语句中用"*"代表取指针变量所指向的目标变量,用"&"代表取地址。
对于一般函数来说,我们一般在主函数中调用,在函数中可调用其它函数却不调用其本身;而对于递归函数来说,我们可以直接或间接地调用自身函数。其特点为将大型复杂问题转化为规模较小的问题。例如:求n!
#include<iostream>
using namespace std;
long fact(int n)
{
if(n==0) return 1;递归边界(递归终止情况)
else return n*fact(n-1);递归式(递归调用)
}
int main()
{
int n;
cout<<"Enter n(>=0):";
cin>>n;
cout<<n<<"!="<<fact(n)<<endl;
}
感悟:经过一段时间的学习,我认为可以将函数看作一种工具。当我们在解决某个问题时,可以将其分解为几部分,通过函数分别解决,最终解决问题。也可将其用作某种功能的实现,通过自己编写的算法,完成这种功能。总而言之,函数的运用可以帮助我们更为简便的解决问题!