函数名做实参传递及程序实例
来源:互联网 发布:网络用语2016最新 编辑:程序博客网 时间:2024/06/15 17:28
在C语言中常出现函数调用,而执行函数时会出现参数的传递,其中参数传递需要形参与实参的配合。形式参数,是在定义函数名函数体时所使用的参数,其作用是用于接收外部主调函数传入的参数。即函数括号内的所有参数均称为形参。与之相反的,实参是指主调函数中待传送给被调函数的参数。
其中参数传递又存在两种机制:
一为传值调用机制,即只能存在单方向的实参的值传递给形参,而不能把形参的值反向传递给实参。在函数调用过程中,形参的变化不会影响实参,形参在函数开始时分配空间,结束时自动释放。
二为引用调用机制,即实参将地址传递给形参而不是传递值,所以形参在函数内不申请空间,其在函数内的任何操作都是透过地址对实参进行操作,对实参产生影响。
同一函数的形参和实参在数量、类型、顺序上必须一直,否则会出现类型不匹配的错误。
函数做实参使用:
实参的传递范围相当广泛,包括常量、变量、表达式、函数等,在传递时必须有确定的值。常量、变量传递都相当常见,而不常见的是函数做实参。
函数做参数传递与变量由引用调用机制传递类似,其本质相同,不同之处在于其写法。
C语言中由引用调用机制传递参数,在实参前添加取地址符,在形参处添加指针运算符即可。而函数名作为参数,需要用到函数指针。以下为函数指针定义:
Type(*name)(argument_list);表示返回值是type,参数列表为argument_list的函数指针name。
函数做实参,适用于函数根据不同情况调用不同函数进行同一特定功能的情况。
程序实例:
示例1:
#include<bits/stdc++.h>
#defineStatus int
#defineOK 1
usingnamespace std;
voidPrintOne(){
cout<<1<<endl;
}
voidPrintTwo(){
cout<<2<<endl;
}
void Print(void(*Printxx)()){ //根据情况分别调用PrintOne或//PrintTwo函数来执行Print功能
Printxx();
}
voidSelect(int ch){
if (ch==1) Print(PrintOne); //函数名作实参传递函数地址
else Print(PrintTwo);
}
intmain()
{
int ch=0;cin>>ch;
Select(ch);
}
输入:1
输出:1 //函数Print()调用PrintOne()
输入:2
输出:2 //函数Print()调用PrintTwo()
示例2:
#include<bits/stdc++.h>
usingnamespace std;
voidPrintTwo(){
cout<<2<<endl;
}
voidPrintOne(){
cout<<1<<endl;
}
voidPrint(void (*Printxx)()){
Printxx();
}
voidPPrint(int n){
int cnt=0;
for (int i=1;i<=n;i++){
cnt+=i;
}
cout<<cnt;
if(cnt%2) Print(PrintOne);
else Print(PrintTwo);
}
intmain()
{
int n=0;cin>>n;
PPrint(n);
}
输入:3
输出:62
输入:2
输出:31
- 函数名做实参传递及程序实例
- Java值传递和引用传递及形参实参的分析(实例对比c++)
- 【代码】结构体做函数参数,实现形参向实参传递值
- C语言数组名做实参与C++容器名做实参对主程序的影响
- 函数中实参到形参的传递
- 函数中实参到形参的传递
- 函数中实参到形参的传递
- 用数组元素做函数实参
- <C语言>函数作实参传递给另一函数
- 在VS2013中运行程序时如何传递实参
- 函数名做函数参数
- 函数名做函数参数
- 函数名做函数参数
- 实参求值顺序及参数间的数据传递
- 【c基础】c语言 变量 数组元素 数组名做函数参数传递
- 函数参数的传递(复制实参的值)
- 十七周项目1-1-2函数的实参传递
- 函数的形参与实参间的数据传递
- JAVA面向对象编程——多态
- js鼠标滚轮事件兼容
- 百度2017春招笔试的部分编程题
- python实战游戏开发——安装pygame
- java面试题(上)
- 函数名做实参传递及程序实例
- Hibernate的CURD操作
- 单链表构成及其示例
- spark性能调优之数据倾斜优化
- 了解hibernate.propertites文件
- Sudoku
- 在n个整数中选k个,使选出来的数的和为sum
- UVA
- 第七章习题 计算1+2+3+...+1000的汇编mbr程序 adc指令使用