C语言函数指针与函数变量

转载请注明出处:http://www.cnblogs.com/idalink/p/4420816.html

传统数据类型,无论是基本数据类型变量还是构造数据类型、引用数据类型变量,都逃过不 [变量类型 变量名这种定义方式。但是有个类型变量就很奇特, 那就是函数指针类型定义。因为函数结构复杂,怎么才能抽离这这一量呢?

函数类型定义,定义一个FUNCTION函数类型:

typedef int (*Function)(int, int);                                                         

毫无疑问,这是标准写法,后面有几个参数就写几个参数,如果没有参数就写0个参数,或则写上void关键字。比如:

typedef void (*Function)([void]);           //灰色方框表示可选               

既然有了函数指针类型,定义变量也就轻而易举:

Function function = existedFunction;                            

当然,不经过typdef关键字也能快速定义变量:

int (*function)(int, int) = existedFunction;                        

得到函数指针变量就可以通过指针调用函数,格式为:

int result = (*function)(a, b);                             

一个完整的demo如下:

 

#include <iostream>

using namespace std;

void sayHello(void)
{
    cout<<"\nHello\n";
}

int add(int a, int b)
{
    return a + b;
}

typedef int (*Add_Function)(int, int);

typedef void (*MySayHello_Void)(void);

typedef void (*MySayHello)();

int main()
{
    int (*myFunction)(int, int) = add;
    Add_Function myFunctionFromType = add;
    
    int result1 = myFunction(100, 202);
    int result2 = (*myFunction)(100, 202);
    int result3 = myFunctionFromType(100, 202);
    int result4 = (*myFunctionFromType)(100, 202);
    
    
    int result5 = (**myFunctionFromType)(100, 202);

    
    cout<<"\nCaculateResult1---> "<<result1<<"\n";
    cout<<"\nCaculateResult2---> "<<result2<<"\n";
    cout<<"\nCaculateResult3---> "<<result3<<"\n";
    cout<<"\nCaculateResult4---> "<<result4<<"\n";
    cout<<"\nCaculateResult5---> "<<result5<<"\n";
    
    MySayHello_Void sayHelloFunVoid = sayHello;
    sayHelloFunVoid();
    
    MySayHello sayHelloFun = sayHello;
    sayHelloFun();
    
    return 0;
}

 

运行结构为:

 

liuyudeiMac:Study_GDB liuyu$ g++ test_function_gdb.cpp -o test
liuyudeiMac:Study_GDB liuyu$ ./test

CaculateResult1---> 302

CaculateResult2---> 302

CaculateResult3---> 302

CaculateResult4---> 302

CaculateResult5---> 302

Hello

Hello

 

posted @ 2015-04-12 22:19  Dalink  阅读(475)  评论(0编辑  收藏  举报