• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 详解C语言结构体中的函数指针

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

作者:七水_SevenFormer 字体:[增加 减小] 来源:互联网 时间:2017-05-28

七水_SevenFormer 通过本文主要向大家介绍了c语言指针详解,c语言指针详解视频,c语言指针用法详解,c语言数组与指针详解,c语言结构体详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展。那么,我们在C语言的结构体中,只能通过定义函数指针的方式,用函数指针指向相应函数,以此达到调用函数的目的。

函数指针

函数类型 (*指针变量名)(形参列表);第一个括号一定不能少。
“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少。
 注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。
要声明一个函数指针,使用下面的语法:

Return Type ( * function pointer's variable name ) ( parameters ) 

</div>

例如声明一个名为func的函数指针,接收两个整型参数并且返回一个整型值

int (*func)(int a , int b ) ; 
</div>

可以方便的使用类型定义运用于函数指针:

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

</div>

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

typedef int (*Operation)(int a , int b );
</div>

再定义一个简单的名为STR的结构体

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

 } STR;

</div>

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

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

现在我们可以写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 ;
}
</div>

运行结果如下:

 the result is 8
 the result is 15 
</div>

完整的代码如下:

#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 ;
}

</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言中条件编译详解
  • C语言中强制地址跳转详解
  • 详解C 语言项目中.h文件和.c文件的关系
  • C语言中 值传递和指针传递实例详解
  • 详解C语言中的函数、数组与指针
  • C语言 坐标移动详解及实例代码
  • 详解C语言中的字符串拼接(堆与栈)
  • C语言 经典题目螺旋矩阵 实例详解
  • C语言 文件操作解析详解及实例代码
  • C语言 冒泡排序算法详解及实例

相关文章

  • 2017-05-28C++构造函数深度学习
  • 2017-05-28C++、C语言和JAVA开发的区别
  • 2017-05-28通过C++程序示例理解设计模式中的外观模式
  • 2017-05-28浅析C++中的虚函数
  • 2017-05-28枚举和宏的区别详细解析
  • 2017-05-28C++实现自顶向下的归并排序算法
  • 2017-05-28C与C++动态分配二维数组的实现方法
  • 2017-05-28C++学习小结之语句
  • 2017-05-28深入C++ 函数映射的使用详解
  • 2017-05-28C++中指向对象的常指针与指向常对象的指针详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c++通过引用实现三个数字求最大值
    • Dijkstra最短路径算法实现代码
    • VC使用TerminateProcess结束进程实例
    • C++实现大数乘法算法代码
    • C语言中基础小问题详细介绍
    • C语言实现排序算法之归并排序详解
    • c++实现加载so动态库中的资源
    • 解析C++中派生的概念以及派生类成员的访问属性
    • C++实现翻转单词顺序
    • C++设计模式之抽象工厂模式

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有