注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

阿英讲C语言结构体中的函数指针类型变量  

2013-01-14 22:30:53|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这是类似于C++中类的实现,其效果是代码整洁紧凑,条理清晰。

废话不说,直接上Demo,大家直接copy到工作实践中即可。希望大家勤修戒定慧,远离贪嗔痴,南无阿弥陀佛。


例1

#include <stdio.h>
// Defines the function callback type.
typedef int (*pFun1)();
typedef int (*pFun2)(int paraA, int paraB);

    struct funstr
    {
       pFun1 fun1; //void (*fun1)();
       pFun2 fun2; //void (*fun2)(int,int);
    };

    void myfun1()
    {
       printf("This is myfun1();\n");
    }
   
    void myfun2(int a,int b)
    {
       printf("%d\n",a-b);
    }

    int main()
    {
       struct funstr test = {myfun1, myfun2};
       test.fun1();
       test.fun2(4,1);
       return 0;
    }


例2

/*
说明:demo[0],demo[1]可以看做两种不同功能的遥控器实体,
demo[0].x为获取遥控器的固有属性,可以是遥控器的品牌
demo[0].func(4,3)可以抽象为同时按下4,3按键后遥控器的反应;
*/
#include "stdio.h"
typedef int (*pFun)(int paraA, int paraB);

struct DEMO   //遥控器实体
{
    char x;   // 按键
    pFun func; //int ( *func )( int x, int y ); //函数指针    //按按键
};

int add2( int x, int y )   //定义遥控器发送指令
{
    return x + y;
}

int dec2( int x, int y )   //定义遥控器发送指令
{
    return x -y;
}

struct DEMO demo[2] =
{
    {1, add2},       {2, dec2}
};

int main( void )
{
    printf( "func%d=%d\n", demo[0].x, demo[0].func( 4, 3 ) );
    printf( "func%d=%d\n", demo[1].x, demo[1].func( 4, 3 ) );
    return 0;
}


例3

#include <stdio.h>

// Defines the function type.
typedef int (*pFun)(int paraA, int paraB);

struct FuncPtr
{
int x;
int y;

// A function pointer to the implementation of the Summary.
pFun GetSum;
};

// The function of summary.
int GetSum(int paraA, int paraB)
{
return (paraA + paraB);
}

int main(void)
{
struct FuncPtr fp;
int result = 0;

fp.x = 901;
fp.y = 1985;

fp.GetSum = GetSum;
result = fp.GetSum(fp.x, fp.y);
printf(" result  = %d", result);
getchar();
}

  评论这张
 
阅读(369)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016