《C关键字分析》之typedef与callback

一、typedef定义函数指针类型

1.源码

2.c

  1. #include <stdio.h>
  2. typedef int (*HAL_CALL_BACK)(int,int);
  3. int test(int a,int b);
  4. int add(void* func,int a,int b);
  5. int main(){
  6. //  printf("TK------>>>test is 0x%lx\n",test);
  7. int result = add((void*) test,3,4);
  8. printf("TK------>>>>result is %d\n",result);
  9. return 0;
  10. }
  11. int test(int a,int b){
  12. return a + b;
  13. }
  14. int add(void* func,int a,int b){
  15. HAL_CALL_BACK test2 = (HAL_CALL_BACK)func;
  16. int (*test1)(int,int) = (HAL_CALL_BACK)func;
  17. //printf("TK------->>>>>func is 0x%lx\n",func);
  18. return test1(a,b);
  19. }

2.编译运行

gcc -o 2 2.c

./2

[plain] view plaincopy
  1. TK------>>>>result is 7

二、函数指针类型

1.理解int (* func)(int ,int )

在上面的表达式中从左到右有四个运算符()、*、();

运算符的优先级()比*高,()的结合方向是自左到右,*的结合方向是自右到左;

()结合是从左到右,这是定义了一个指针变量func,接下来是后括号,表明是定义一个函数类型的指针func;

接下来说明该变量func是一个指向,参数是两个int、返回值是一个int的函数,的指针变量。

2.源码

1.c

[cpp] view plaincopy
  1. #include <stdio.h>
  2. //typedef int (*HAL_CALL_BACK)(int,int);
  3. int test(int a,int b);
  4. int add(int func(int,int),int a,int b);
  5. int main(){
  6. //  printf("TK------>>>test is 0x%lx\n",test);
  7. int result = add(test,3,4);
  8. printf("TK------>>>>result is %d\n",result);
  9. return 0;
  10. }
  11. int test(int a,int b){
  12. return a + b;
  13. }
  14. int add(int func(int,int),int a,int b){
  15. int (*test1)(int,int) = func;
  16. //printf("TK------->>>>>func is 0x%lx\n",func);
  17. return test1(a,b);
  18. }

2.编译和运行

gcc -o 1 1.c

./1

  1. TK------>>>>result is 7

《C关键字分析》之typedef与callback相关推荐

  1. 《C关键字分析》之extern用法

    <C关键字分析>之extern用法 一.假设为三方提供库源码和头文件 1.共享库部分 sanf.c #include <stdio.h> int a; void hello() ...

  2. mysql数据生成词云图_CVPR2018关键字分析生成词云图与查找

    今日目标:爬取CVPR2018论文,进行分析总结出提到最多的关键字,生成wordCloud词云图展示,并且设置点击后出现对应的论文以及链接 对任务进行分解: ①爬取CVPR2018的标题,简介,关键字 ...

  3. C语言中关键字const、typedef

    const:const是C语言的一个关键字,是用来定义常量的.const是常属性的意思,当一个变量被const修饰之后,其值不能再被改变了,但它仍然是一个变量,只不过有了常属性. 我们如何才能验证这一 ...

  4. Java基础三个排序详解_继承粗解语法关键字分析

    集合存放数据的容器,存放的数据可以是基本类型也可以是引用类型,数据类型必须一致,存放数据的空间是连续的即地址连续,长度固定 声明数组变量 首先必须声明数组变量,才能在程序中使用数组.下面是声明数组变量 ...

  5. 3、mysql索引优化一:Explain关键字分析

    作为一个Java开发,在我们日常工作中,对于mysql的使用中涉及最多的恐怕就是写SQL了,一定遇到过sql执行慢的问题,那么SQL优化工作就显得格外重要.有了对mysql执行过程以及索引实现原理了解 ...

  6. MySQL_explain关键字分析查询语句

    版权声明:本文为博主原创文章,未经博主允许不得转载. 通过对查询语句的分析,可以了解查询语句的执行情况.MySQL中,可以使用EXPLAIN语句和DESCRIBE语句来分析查询语句. EXPLAIN语 ...

  7. sql优化之explain关键字分析

      explain是非常重要的关键字,要善于运用它.  通过explain我们可以获得以下信息: 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少 ...

  8. ElasticSearch7.3学习(二十一)----Filter与Query对比、使用explain关键字分析语法

    1.数据准备 首先创建book索引 PUT /book/ {"settings": {"number_of_shards": 1,"number_of ...

  9. 多线程并发的解决方案 volatile synchronized notify notifyAll wait关键字分析

    2019独角兽企业重金招聘Python工程师标准>>> 1.ThreadLocal用法 在java中,如果一个变量需要被多个线程访问,可以使用volatile来声明它为"易 ...

最新文章

  1. What is the purpose for IT Pro in Windows 10 Creators Update
  2. zoj——3556 How Many Sets I
  3. es-04-mapping和setting的建立
  4. 排序算法之low B三人组
  5. SAP Customer Data Cloud支持的Social Media channel
  6. 怎样下载安装python_Windows系统上如何安装Python和pip
  7. 深入理解HashMap(原理,查找,扩容)
  8. fastdfs-配置存储服务器storage
  9. 一个while的小小问题
  10. C#网络编程之面向连接的套接字
  11. Jquery头像编辑器
  12. 免费天气预报API接口
  13. python requests默认超时时间_requests获取响应时间和超时
  14. 【FJ 2016 Day5】冷战(coldwar)
  15. 用Bert做英法机器翻译
  16. Python解决羊车门问题
  17. python中write函数%啥意思_python write( )函数
  18. 手把手教你配置苹果APNS推送服务
  19. 【STM32学习笔记】#001 前期准备
  20. ASEMI整流二极管MR754参数,MR754图片,MR754应用

热门文章

  1. ERROR: modinfo: could not find module rbd FATAL
  2. 基于序列图像的三维体绘的视线投射算法
  3. mysql connector读后记
  4. win10+ubuntu双系统修复ubuntu启动引导
  5. CodeWithMosh--mysql 学习笔记(4) -- 相关数据类型
  6. win7系统的自动更新很长时间,如何关闭
  7. 如何利用VUE动态添加class样式
  8. matla可以导出回归结果表格吗_表格高级筛选,一键筛出想要的数据
  9. Servlet读取xml文件的配置参数
  10. Multimedia Studio 系统要求