数据结构与算法C++描述(10-插曲)---函数名作形参

在文献[1]中,描述二叉树时利用了函数名作为形参。在此加以说明与解释。

1.函数参数的传递方式

我们都知道,函数参数的传递一般有:值传递、指针传递和引用传递。先来回顾一下:

  1. 值传递时,先临时分配一块内存,将形参的值拷贝进去,在函数中利用临时分配的变量进行运算。当函数退出时,释放临时分配的内存,也就是说,不会影响原来的实参值。如下述程序及运行结果所示。
void fun1(int a)                               //值传递方式
{
    a = a + 1;                                 //临时分配一块内存,用于存放形参值
    cout << "值传递函数中:   a=     " <<a << endl
         << "值传递函数中:a的地址为:"<<&a<<endl;
}
void main(void)
{
    int a = 1;
    fun1(a);
    cout << "主函数中:   a=     " << a << endl
        << "主函数中:a的地址为:" << &a << endl;
}

运行结果:
这里写图片描述
2. 指针传递(地址传递)
指针传递,即地址传递时,形参为一个地址,在函数中对这个地址进行操作。比如传递一个数组名(数组的首地址),在可以访问这个数组中的元素。

void fun2(int *b)
{
    b = b + 1;                                 //取当前地址的下一个地址
    cout << "值传递函数中:   b=     " << b[0]<<" "<<b[1] << endl
        << "值传递函数中:b的地址为:" << b << endl;
}
void main(void)
{
    int b[] = { 2,3,4 };
    fun2(b);
    cout << "主函数中:   b=     " << b[0]<<" "<<b[1] << endl
        << "主函数中:b的地址为:" << &b << endl;
}

运行结果如下:
这里写图片描述

3.引用传递
引用传递时,在函数中的操作相当于是对实参的操作,会影响实参的值。

void fun3(int &c)
{
    c = c + 1;
    cout << "值传递函数中:   c=     " <<c<<endl
        << "值传递函数中:c的地址为:" << &c << endl;
void main(void)
{
    int c = 3;
    fun3(c);
    cout << "主函数中:   c=     " << c<<endl
        << "主函数中:c的地址为:" << &c << endl;
}

运行结果:
这里写图片描述

2. 函数名作为形参

函数名作为形参时,类似于数组名作为形参,传递的是函数的地址。相当于上述方式中的指针传递。
作为一个函数,就必须要有形参列表。在传递过程中,要给予它正确的形参列表。
见下面的例子:

//函数名作为形参
void print_func(int i)
{
    cout << i << " " << endl;
}
//函数func调用函数名为pfunc的函数,并将接收的形参i作为pfunc的形参
void main_func(void(*pfunc)(int), int i)
{
    pfunc(i);                    
}
void main(void)
{
    void(*fun)(int i);           //声明函数指针,有一个int型的形参
    fun = print_func;
    main_func(fun, 100);
}

运行结果:
这里写图片描述


参考文献:
[1] 数据结构算法与应用:C++描述(Data Structures, Algorithms and Applications in C++ 的中文版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值