C++ pass function and arguments as parameter via function address * symbol

#include <iostream>
#include <functional>

using namespace std;

int sum41(int x,int y);
int multiply42(int x,int y);
int passFuncAddress43(int x,int y,int(*func)(int ,int));
void callFuncAddress44(int x,int y);

int main(int args, char **argv)
{
    callFuncAddress44(atoi(argv[1]), atoi(argv[2]));
}

void callFuncAddress44(int x,int y)
{
    cout<<"Sum of x and y is "<<passFuncAddress43(x,y,&sum41)<<endl;
    cout<<"Prod of x and y is "<<passFuncAddress43(x,y,&multiply42)<<endl;
}

int passFuncAddress43(int x,int y,int(*func)(int ,int))
{
    return func(x,y);
}

int multiply42(int x,int y)
{
    cout<<"In int multiply42(int x,int y)"<<endl;
    return x*y;
}

int sum41(int x,int y)
{
    cout<<"In int sum41(int x,int y)"<<endl;
    return x+y;
}

Compile the above code via g++,and run as below

./h1 10000 10000

 

 

Please pay more attention to below function declaration and definition via passing function address.

//Pass function via address *, include return type,function address and parameter types

int passFuncAddress43(int x,int y,int(*func)(int ,int))
{
    return func(x,y);
}

When we invoke above function which we will pass arguments at first orderly and at last pass function address via & symbol

void callFuncAddress44(int x,int y)
{
    cout<<"Sum of x and y is "<<passFuncAddress43(x,y,&sum41)<<endl;
    cout<<"Prod of x and y is "<<passFuncAddress43(x,y,&multiply42)<<endl;
}

 

posted @ 2022-05-13 19:50  FredGrit  阅读(16)  评论(0编辑  收藏  举报