四联光电智能照明论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2594|回复: 0
打印 上一主题 下一主题

C语言结构体中的函数指针

[复制链接]
  • TA的每日心情
    开心
    2018-11-9 08:52
  • 241

    主题

    691

    帖子

    7652

    积分

    论坛元老

    Rank: 8Rank: 8

    积分
    7652
    跳转到指定楼层
    楼主
    发表于 2016-11-25 13:49:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    源文地址:http://www.cnblogs.com/archimede ... er-in-c-struct.html

    引言

    指针是C语言的重要组成部分, 于是深入理解指针并且高效地使用指针可以使程序员写出更加老练的程序。我们要记住指针是一个指向内存地址的变量。指针可以引用如int、char……常见的数据类型,例如:

    int * intptr;     // 声明一个指向整型值的指针
    int intval = 5 ;  // 定义一个整型变量
    intptr = & intval ; // intptr现在包含intval的地址

    指针不仅仅指向常规的类型还可以指向函数

    函数指针
    函数指针的内容不难理解,不再赘述,参见《C语言函数指针的用法》

    语法
    要声明一个函数指针,使用下面的语法:
    Return Type  ( * function pointer's variable name ) ( parameters )

    例如声明一个名为func的函数指针,接收两个整型参数并且返回一个整型值
    int (*func)(int a , int b ) ;

    可以方便的使用类型定义运用于函数指针:
    typedef int (*func)(int a , int b ) ;

    结构体中的函数指针
    我们首先定义一个名为Operation的函数指针:

    typedef int (*Operation)(int a , int b );

    再定义一个简单的名为STR的结构体
    1. typedef  struct _str {
    2.        int  result ; // 用来存储结果
    3.        Operation  opt; // 函数指针

    4. } STR;
    复制代码

    现在来定义两个函数:Add和Multi:
    复制代码
    1. //a和b相加
    2. int Add (int a, int b){
    3.     return a + b ;
    4. }
    5. //a和b相乘
    6. int Multi (int a, int b){
    7.     return a * b ;
    8. }
    复制代码


    现在我们可以写main函数,并且将函数指针指向正确的函数:

    1. int main (int argc , char **argv){
    2.       STR str_obj;
    3.       str_obj.opt = Add;    //函数指针变量指向Add函数
    4.       str_obj. result = str_obj.opt(5,3);
    5.       printf (" the result is %d\n", str_obj.result );
    6.       str_obj.opt= Multi;    //函数指针变量指向Multi函数
    7.       str_obj. result = str_obj.opt(5,3);
    8.       printf (" the result is %d\n", str_obj.result );
    9.       return 0 ;
    10. }
    复制代码

    运行结果如下:
      the result is 8
      the result is 15

    完整的代码如下:

    1. #include<stdio.h>

    2. typedef int (*Operation)(int a, int b);
    3. typedef struct _str {
    4.     int result ; // to sotre the resut
    5.     Operation  opt; // funtion pointer
    6. } STR;

    7. //a和b相加
    8. int Add (int a, int b){
    9.     return a + b ;
    10. }

    11. //a和b相乘
    12. int Multi (int a, int b){
    13.     return a * b ;
    14. }

    15. int main (int argc , char **argv){
    16.       STR str_obj;
    17.       str_obj.opt = Add;    //函数指针变量指向Add函数
    18.       str_obj. result = str_obj.opt(5,3);
    19.       printf ("the result is %d\n", str_obj.result );
    20.       str_obj.opt= Multi;    //函数指针变量指向Multi函数
    21.       str_obj. result = str_obj.opt(5,3);
    22.       printf ("the result is %d\n", str_obj.result );
    23.       return 0 ;
    24. }
    复制代码

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Silian Lighting+ ( 蜀ICP备14004521号-1 )

    GMT+8, 2024-4-25 18:55 , Processed in 1.078125 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表