本文有xhz1234(徐洪志)编写,转载请注明出处。

http://blog.csdn.net/xhz1234/article/details/36635083

作者:徐洪志

近期阅读Linux-内核代码。发现非常多地方使用了函数指针,遂自己写一个演示样例程序。以供參阅:

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. #define ADDONE 0
  5. #define MINUSONE 1
  6. #define S_OK 0
  7. #define S_ERR -1
  8.  
  9. typedef int(*dir_fn)(int *data); //函数指针
  10.  
  11. //实际函数1
  12. int add_func(int *data)
  13. {
  14. (*data)++;
  15. return S_OK;
  16. }
  17.  
  18. //实际函数2
  19. int minus_func(int *data)
  20. {
  21. (*data)--;
  22. return S_OK;
  23. }
  24.  
  25. //核心:依据參数cmd,获取相应的func
  26. dir_fn lookup_ctl(int cmd)
  27. {
  28. dir_fn fn = NULL;
  29. switch(cmd)
  30. {
  31. case ADDONE:
  32. fn = add_func;
  33. break;
  34. case MINUSONE:
  35. fn = minus_func;
  36. break;
  37. default:
  38. break;
  39. }
  40.  
  41. return fn;
  42. }
  43.  
  44. int main(void)
  45. {
  46. int data = 100;
  47. int cmd = -1;
  48. dir_fn fn = NULL;
  49.  
  50. printf("Input the cmd<0 add, 1 minus>\n");
  51. scanf("%d", &cmd);
  52.  
  53. fn = lookup_ctl(cmd);
  54.  
  55. fn(&data);
  56.  
  57. printf("Result is: %d\n", data);
  58.  
  59. return 0;
  60. }

本文有xhz123(徐洪志)编写,转载请注明出处。

作者:徐洪志

函数指针使用演示样例(參考Linux-内核代码)的更多相关文章

  1. eclipse 配置执行hadoop 2.7 程序样例參考步骤

    前提:你搭建好了hadoop 2.x的linux环境,并可以成功执行.还有就是window可以訪问到集群.over 1. hfds-site.xml 添加属性:关闭集群的权限校验.windows的用户 ...

  2. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  3. Python Web框架Tornado的异步处理代码演示样例

    1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...

  4. 01_MUI之Boilerplate中:HTML5演示样例,动态组件,自己定义字体演示样例,自己定义字体演示样例,图标字体演示样例

     1安装HBuilder5.0.0,安装后的界面截图例如以下: 2 依照https://www.muicss.com/docs/v1/css-js/boilerplate-html中的说明,创建上 ...

  5. JavaScript 中对变量和函数声明提前的演示样例

    如题所看到的,看以下的演示样例(能够使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发人员工具,进入控制台console输入)(使用技巧: 控制台输入时Shift+Enter能够中途代码 ...

  6. RPM安装包-Spec文件參数具体解释与演示样例分析

    spec文件是整个RPM包建立过程的中心,它的作用就如同编译程序时的Makefile文件. 1.Spec文件參数 spec文件包括建立一个RPM包必需的信息,包括哪些文件是包的一部分以及它们安装在哪个 ...

  7. 最简单的视音频播放演示样例4:Direct3D播放RGB(通过Texture)

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  8. 最简单的视音频播放演示样例5:OpenGL播放RGB/YUV

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  9. 最简单的视音频播放演示样例8:DirectSound播放PCM

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

随机推荐

  1. ABP数据库的迁移

    添加表,一(Test)对多(Test1)关系 Test using Abp.Domain.Entities.Auditing; using System; using System.Collectio ...

  2. NuGet安装本地包命令行

    尝试安装本地的NuGet包. 键入 "get-help NuGet" 可查看所有可用的 NuGet 命令. install-package Polly.Net40Async-Sig ...

  3. 剪枝的定义&&hdu1010

    半年前在POJ上遇到过一次剪枝的题目,那时觉得剪枝好神秘...今天在网上查了半天资料,终于还是摸索到了一点知识,但是相关资料并不多,在我看来,剪枝是技巧,而不是方法,也就是说,可能一点实用的小技巧,让 ...

  4. HashSet源码分析 jdk1.6

    Set的特点:Set元素无顺序,且元素不可以重复. 1.定义 public class HashSet<E> extends AbstractSet<E> implements ...

  5. JDBC 学习笔记(二)—— 详解 JDBC 的四种驱动类型

    JDBC 有四种驱动类型,分别是: JDBC-ODBC 桥(JDBC-ODBC bridge driver plus ODBC driver) 本地 API 驱动(Native-API partly ...

  6. Bash Command 1: find

    GNU find searches the directory tree rooted at each given starting-point by evaluating the given exp ...

  7. gulpfile.js备份

    var gulp = require('gulp'); var uglify = require('gulp-uglify'); // var rename = require('gulp-renam ...

  8. zoj 3790 Consecutive Blocks 离散化+二分

    There are N (1 ≤ N ≤ 105) colored blocks (numbered 1 to N from left to right) which are lined up in ...

  9. Mac下Android SDK更新不了的解决办法

    在hosts文件中加入: 203.208.46.146   dl.google.com 203.208.46.146 dl-ssl.google.com

  10. MX

    A mail exchanger record (MX record) is a type of resource record in the Domain Name System that spec ...