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

这篇文章简单的叙述一下函数指针在结构体中的应用,为后面的一系列文章打下基础

本文地址:http://www.cnblogs.com/archimedes/p/function-pointer-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的结构体

typedef  struct _str {
       int  result ; // 用来存储结果
       Operation  opt; // 函数指针 

 } STR;

现在来定义两个函数:Add和Multi:

//a和b相加
int Add (int a, int b){
    return a + b ;
}
//a和b相乘
int Multi (int a, int b){
    return a * b ;
}

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

int main (int argc , char **argv){
      STR str_obj;
      str_obj.opt = Add;    //函数指针变量指向Add函数
      str_obj. result = str_obj.opt(5,3);
      printf (" the result is %d\n", str_obj.result );
      str_obj.opt= Multi;    //函数指针变量指向Multi函数 
      str_obj. result = str_obj.opt(5,3);
      printf (" the result is %d\n", str_obj.result );
      return 0 ;
}

运行结果如下:

  the result is 8
  the result is 15 

完整的代码如下:

#include<stdio.h>

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

//a和b相加
int Add (int a, int b){
    return a + b ;
}

//a和b相乘
int Multi (int a, int b){
    return a * b ;
}

int main (int argc , char **argv){
      STR str_obj;
      str_obj.opt = Add;    //函数指针变量指向Add函数
      str_obj. result = str_obj.opt(5,3);
      printf ("the result is %d\n", str_obj.result );
      str_obj.opt= Multi;    //函数指针变量指向Multi函数 
      str_obj. result = str_obj.opt(5,3);
      printf ("the result is %d\n", str_obj.result );
      return 0 ;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值