对函数深入了解

函数解析
1、为什么要用函数
想知道为什么要使用函数,那我们先要知道什么是函数?
函数是一段可以重复使用的代码,用来独立地完成某个功能,也可以用来接收用户传递的数据。美国人将函数称为“Function”,Function除了有“函数”的意思,还有“功能”的意思,从本质上看,程序是由函数组成的,也可以说程序是由一个个功能组成的。
在了解了函数之后,我们开始了解为什么使用函数?
当一个函数特别小的时候,我们可以直接将所有的代码都写入main()主函数中;但当我们开始一个庞大的程序开发,程序越来越复杂,如果依旧将所有的代码都放入main中,我们的开发会变得越来越困难,这个时候函数的作用就非常实用。
(1)可重用性 可以在函数中多次调用,避免了重复的代码,功能还可以实现共享。
(2)降低程序的复杂程度 将复杂任务划分成更小,更简单的任务
...

int sum(int a,int b)
{
    int num;
    num=a+b;
    return num;
}

int main()
{
    int x=10,y=11,z=12;
    int num1,num2;
    num1=sum(x+y);
    num2=sum(x+z);
    return 0;
}

...
我用一个最简单的加法函数,来体现函数对于程序的便利性。
2、为什么要用函数重载
同样,我们先来了解一下函数重载?
函数重载是指在同一作用域内,可以有一组具有相同函数名,不同函数列表的函数。重载函数通常用来命名一组功能相似的函数。
重载函数有什么好处呢
(1)减少了函数名的数量,避免了名字空间的污染
(2)增加了程序的可读性
...

int sumOfSquare(int a,int b)
{
    return a*a+b*b;
}

double sumOfSquare(double a,double b)
{
    return a*a+b*b;
}

int main()
{
    int m,n;
    cout<<"Enter two integer:";
    cin>>m>>n;
    cout<,"Their sum of square:"<<sumOfSquare(x,y)<<endl;
    double x,y;
    cout<<"Enter two integer:";
    cin>>x>>y;
    cout<<"Their sum of square:"sumOfSquare(x,y)<<endl;
    return 0;
}

...
3、什么是值传递
值传递是指在过程调用时,传递给形参的是调用过程中的相应实参的值,形参与实参各占有不同位值的储存空间,在执行过程中,改变了形参变量的值,但不会调用过程的实参值。
通过实验过程来进一步了解值传递
...

#include <stdio.h>
void swap(int a,int b)
{
    int t;
    printf("(2)a=%d  b=%d\n",a,b);  /*调用函数过后形参的值*/
    t=a;a=b;b=t;
    printf("(3)a=%d  b=%d\n",a,b);  /*调用函数内交换后形参的值*/
}
int main()
{   
    int a=10,b=20;
    printf("(1)a=%d  b=%d\n",a,b);  /*实参a,b未调用函数时的值*/
    swap(a,b);
    printf("(4)a=%d  b=%d\n",a,b);  /*实参a,b调用后的值*/
    return 0;
}

...
4、什么是地址传递
地址传递是指在过程被调用时,是把实参变量的内存地址传递给被调用过程形参,实际就是形参与实参使用相同地址的内存单元,改变了形参值也就是改变了实参的值。
通过实验过程进一步了解地址传递
...

void fun(int *b)
{
    *b = 1; 
}

int main()
{
    int a = 0;
    fun(&a);
    printf("a=%d\n", a);
    return 0;
}

...
5、递归函数
对于递归函数,我的理解就是在函数执行时,函数直接或间接调用函数本身。
其中斐波那契数列是一个非常常见的递归函数。
...

int Fibon(int n)
{
    if(n==1||n==2)
    {
        return 1;
    }
    else
    {
        return Fibon(n-1)+Fibon(n-2);
    }
}

...

猜你喜欢

转载自www.cnblogs.com/xlog/p/11505636.html
今日推荐