函数名做实参传递及程序实例

来源:互联网 发布:网络用语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

原创粉丝点击