加载中…
个人资料
Hill
Hill
  • 博客等级:
  • 博客积分:0
  • 博客访问:11,014
  • 关注人气:0
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

结构体和公用体配合函数指针的应用

(2007-06-12 14:09:17)
  呵呵,现在在linux系统下已经实习好久了,今天突然想起当初最开始学C语言时提出的一个问题,用gcc顺利实现了,才觉得心里舒服点。
  问题是这样的:C语言中的结构体可以存放函数指针吗?
  分析:刚开始学习C的时候是在windows下以tc2.0为开发环境的,还不知道它与Stdand C的差距,也以为tc不能做的就是C不能做的。其实不然,不同公司或组织卡发的编译器不同,自然相应的C语言也不同(极其微笑的差别)。现在回到主题上来,当时我就想,既然结构体可以存放指针,而函数指针也是指针,从而也是一种变量,按理来说,应该可以在结构体中存放函数才对。也就是说下面的代码应该说的通:
    #include <stdio.h>
    struct funstr
    {
       void (*fun1)();
       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;
    }
按照常理这段代码应该是正确的,但在tc下是无法通过编译的。
但用GCC确是可以正常编译,而且结果也如预期的如下:

hill@hill-laptop:~/Desk/temp$ gcc test1.c
hill@hill-laptop:~/Desk/temp$ ./a.out
This is myfun1();
3

    这个例子给我很大启发,在程序开发的时候,即使是C语言也可以利用面向对象思想,而且部分的面向对象思想还可以用C给实现出来。例如,我们可以利用结构体来模拟类。类的方法就用函数指针来表示。

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有