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

来源:互联网 发布:数据挖掘有什么作用 编辑:程序博客网 时间:2024/05/16 19:56

在文献[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++ 的中文版)

阅读全文
0 0