复习C语言指针—函数指针

文章目录

  • 复习C语言指针---函数指针
  • 函数
    • 函数指针
    • 函数指针数组
    • 回调函数
  • 结束语

函数

一个函数表达式其实是不存在直接的"()"操作符的,“()”操作符要求操作数是函数指指针(或者一些类类型)。
实际上,当用 f1(); 这样调用f1时,f1是函数名,“()”会先 f1 转换成函数指针,然后再作为“()”在操作符的操作数完成函数的调用。

函数指针

先简单定义一个函数,比如

int Add(int x, int y)
{return x + y;
}

这是一个实现两个相加的函数
而函数指针,就是指向这个函数的指针,可以通过解引用来调用这个函数
具体代码如下

(*p)表示是指针  (int,int)为指向函数的参数 int表示指向函数的返回类型int(*p)(int, int) = &Add;

注意:函数名可以代表函数的地址
代码如下:

    int(*p)(int, int) = &Add;int(*p1)(int, int) = Add;printf("%p\n", Add);printf("%p\n", &Add);

结果如下:

同时
又值得注意的一点是,函数指针的解引用是可以重复进行的
先看现象

    int(*p)(int, int) = &Add;printf("%p\n", *p);printf("%p\n", **p);//每一次解引用,都会将*p再转换成p//***p,经历3次解引用的隐式转换,又变成p了printf("%p\n", ***p);


原理如下:
正如最开始所说,函数名本身并不能调用函数,是()操作符把函数名转换成函数指针,然后才能调用函数。
而*p也是通过解引用得到函数名,然后编译器再隐式转换成函数指针,然后变成p。以此类推,***p是通过3次解引用,又转换成p

接下来是通过函数指针调用函数,(函数还是Add)
代码如下:

int ret = (*p)(3, 5);int ret1 = p(3, 5);int ret2 = (*****p)(3, 5);printf("%d\n", ret);printf("%d\n", ret1);printf("%d\n", ret2);

函数指针数组

将函数指针和指针数组结合

int Add(int x, int y)
{return x + y;
}int Sub(int x, int y)
{return x - y;
}
int main()
{int(*p1)(int, int) = Add;int(*p2)(int, int) = Sub;//函数指针数组int(*ps1[2])(int, int) = { p1,p2 };return 0;
}

回调函数

回调函数
a函数的参数是函数指针,传入其他函数的地址,用这个函数指针接收,并用函数指针调用
可以减少很多重复的代码
比如计算器,可以用calc(int(*ps)(int,int))这个函数接收四则运算的函数

结束语

文章如果有不对或者不足的地方,欢迎大佬们指正,补充。感谢大家的阅读,如果感觉博主写的还可以,麻烦点个赞支持一下,阿里嘎多。拜托了,这对我真的很重要~

复习C语言指针---函数指针相关推荐

  1. c语言中将函数指针作为形参_在C中将有效指针作为NULL指针

    c语言中将函数指针作为形参 Prerequisite: An Example of Null pointer in C 先决条件: C中的空指针示例 Any pointer that contains ...

  2. c语言函数指针封装函数,C语言之函数指针、回调函数的使用

    一.背景 首先看下如下代码,这个定义是放在头文件的,在程序中tCdrvCallbackFkt也定义了另一个变量,而且括号后面还跟定义了几个变量,不理解这个定义. typedef void (PUBLI ...

  3. C语言:函数指针与指针函数

    文章目录 C语言:函数指针与指针函数 一.概念 二.创建形式 2.1 普通函数创建形式: 2.2 指针函数创建形式: 2.3 函数指针创建形式: 三.使用例子 3.1 指针函数返回字符串 3.2 函数 ...

  4. c语言把结构体首地址放入指针,C语言基础———指针,结构体指针,函数指针

    指针基础 一 指针就是地址,地址就是指针.指针存储的是内存的地址. 二 指针的定义 1.&表示取址运算符,&a 可以取到 a 在内存中的地址;打印地址的占位符为(%p),printf( ...

  5. C语言(函数指针数组)详解

    要了解函数指针数组,可以从三个角度来分析.所谓函数指针数组,从字面意思上来解析,函数指针数组的组成有三个点,函数,指针,数组.首先我们知道,函数指针数组,是一个数组,数组的每个元素是函数指针,也就是一 ...

  6. C语言之函数指针与指针函数

    一.指针函数 指针函数:返回值为指针变量的函数 定义方法:int *a(int b,int c) 返回值为int型指针的函数. 二.函数指针 指针变量,指向函数起始地址. 定义方法:函数类型 (*指针 ...

  7. static关键字 void和void指针 函数指针

    static关键字 1.作用于变量:    用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态存储的,即指 ...

  8. 指针数组 数组指针 函数指针 指针函数

    目录 数组指针 指针数组 函数指针 指针函数 数组指针 数组指针的本质: 它是一个指针,指向的是一个数组 数组指针定义: int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一 ...

  9. 【C基础】指针/指针运算/二级指针/函数指针

    指针定义: 指针是一种数据类型,使用它可以用来定义指针变量,指针变量中存储的其实是整数,这种整数代表了内存的编号. 指针的使用: 1.函数之间相独立,但有些时候需要共享变量.传参是值传递全局变量容易命 ...

最新文章

  1. 我生于1997,我骄傲了吗?
  2. 成功解决pyinstaller生成exe缺少各种包的问题
  3. 电路图符号大全_电工必备电路图符号大全 图解复杂电路图解析方式 值得收藏!...
  4. pythoneasyinstall安装第三方库,Python安装第三方库的3种方法
  5. python怎么开发工具_为程序员和新手准备的8大Python开发工具
  6. OSI七层模型都是什么?
  7. C#LeetCode刷题之#617-合并二叉树​​​​​​​​​​​​​​(Merge Two Binary Trees)
  8. 中小SAP项目中的人员编制(转)
  9. 忘了 忘了,以前学的矩阵知识全交给老师了,敲黑板了,矩阵乘法实例讲解
  10. 树莓派Zero 2 W的自带WiFi性能测试,仅40Mbps左右
  11. python绘制正态分布图像
  12. UFS系列三:UFS数据包UPIU
  13. 快快云安全,网站被劫持怎么办
  14. FreeRTOS动态创建任务
  15. vant vant-list碰到的坑
  16. eclipse导入项目jsp文件报错
  17. asp毕业设计—— 基于asp+access的网上教学系统设计与实现(毕业论文+程序源码)——网上教学系统
  18. 【JQuery】使用JQuery实现城市两级或三级联动(下拉菜单)
  19. (SQL语句)查询排序,顺序和倒序
  20. 蓝绿发布,灰度发布及滚动发布

热门文章

  1. Python 追加json文件
  2. 人工智能技术名词解释
  3. android平板iso,告诉你android平板比iPad好的10个理由
  4. html 文字显示图片左侧,CSS_如何让文字环绕图片显示?
  5. (门控卷积实现)DeepFillv2(图像修复):Free-Form Image Inpainting with Gated Convolution,pytroch代码实现
  6. 惊天突破!电子皮肤问世!道翰天琼认知智能机器人平台API接口大脑为您揭秘
  7. leetcode6 Z字形变换 python
  8. 英文原版电子书下载地址集合
  9. Mac下的Android Studio快捷键
  10. 为什么要学习股票竞价量化?