I come, I see, I conquer

                    —Gaius Julius Caesar

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::


1. 函数指针

注:对于多个具有相同形参类型和返回值类型的函数,可用一个统一的函数去访问,这是函数指针的应用之一。类似于设计模式中的Facade模式!!!


例1 - 函数指针

 

#include <stdio.h>

int max(int x, int y)
{
    
return ( x>? x : y );
}

void main()
{
    
int (*pfunc) (intint); //函数指针的声明
    pfunc = max; //函数指针的初始化
    printf("the maximum is: %d \n", max(105));
    printf(
"the maximum is: %d \n", pfunc(105)); //函数指针的使用
    printf("the maximum is: %d \n", (*pfunc)(105)); //函数指针的使用
}

 

例2 - 参数型函数指针(版本1)

#include <stdio.h>

int sub(int a, int b)
{
    
return a - b;
}

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

int calculate(int a, int b, int (*pfunc)(intint))//参数型函数指针
{
    
return pfunc(a, b);
}

void main()
{
    printf(
"10 sub 5 is: %d \n", calculate(105, sub));
    printf(
"10 add 5 is: %d \n", calculate(105, add));
}  


例3 - 参数型函数指针(版本2)

#include <stdio.h>

int sub(intint);
int add(intint);
int calculate(intintint (*)(intint)); //函数原型声明时不需变量名

void main()
{
    printf(
"10 sub 5 is: %d \n", calculate(105, sub));
    printf(
"10 add 5 is: %d \n", calculate(105, add));
}

int sub(int a, int b)
{
    
return a - b;
}

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

int calculate(int a, int b, int (*pfunc)(intint))
{
    
return (*pfunc)(a, b);
}  

 


2. 函数指针数组

函数还可以像其它整数一样,放在数组的连续内存中,通过索引来取值,这就是C语言中的“函数指针数组”


例4 - 函数指针数组

#include <stdio.h>

int sub(intint);
int add(intint);
int mul(intint);

void main()
{
    
int (*pfunc[])(intint= { sub, add, mul}; //函数指针数组的声明与初始化

    printf(
"10 sub 5 is: %d \n", pfunc[0](105)); //调用相应函数
    printf("10 add 5 is: %d \n", pfunc[1](105)); //调用相应函数
    printf("10 mul 5 is: %d \n", pfunc[2](105)); //调用相应函数
}

int sub(int a, int b)
{
    
return a - b;
}

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

int mul(int a, int b)
{
    
return a * b;
}
posted on 2008-03-03 15:08  jcsu  阅读(1987)  评论(0)    收藏  举报