数据结构与算法C++描述(10-插曲)---函数名作形参
来源:互联网 发布:数据挖掘有什么作用 编辑:程序博客网 时间:2024/05/16 19:56
在文献[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
- 数据结构与算法C++描述(10-插曲)---函数名作形参
- 数据结构与算法分析(C语言描述)L1.1
- 数据结构与算法(C语言描述)——单链表
- 读《算法与数据结构---c语言描述》
- C/C++中数组名作为函数形参
- 算法与数据结构描述
- 排序 - C语言实现(摘自数据结构与算法分析C语言描述))
- 栈及其应用 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 队列 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 二叉查找树 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 散列 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 优先队列(堆) - C语言实现(摘自数据结构与算法分析 C语言描述)
- 散列 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 优先队列(堆) - C语言实现(摘自数据结构与算法分析 C语言描述)
- 散列 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 二叉查找树 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 队列 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 栈及其应用 - C语言实现(摘自数据结构与算法分析 C语言描述)
- leetcode-2 Add Two Numbers
- 对象结构型模式——适配器模式(adapter)
- linux之sort用法
- 理解java Web项目中的路径问题
- json对象格式
- 数据结构与算法C++描述(10-插曲)---函数名作形参
- 二维码的生成细节和原理
- 好用的maven镜像
- 房屋买卖合同纠纷中解约定金的适用
- struts传值失败空指针异常
- js选中页面中内容
- 存储控制器和SDRAM 实验
- (一) Freemarker 简介 && 环境搭建
- JS设计模式