C/C++函数指针与指针函数

前面说的话

面试的时候,经常有面试官问这个问题,在Linux内核里面也是经常被使用的,在看很多大神的代码里面,我们也经常遇到函数指针与指针函数,一样,如果你自己没问题了,就不用往下看了。

 

定义

我们看个代码

int *func(int a,int b)

我们之前说过运算符的优先级,*的优先级低于

由于“*”的优先级低于“()”的优先级,因而func首先和后面的“()”结合,也就意味着,func是一个函数。即:

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

然后这个函数的返回值的类型是 int * 即:指向int类型的指针

 

然后我们这样修改上面的代码

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

(*func)说明func是一个指针,然后后面跟着()说明这个指针指向一个函数,即函数指针。

所以

函数指针:首先是一个指针,这个指针指向一个函数

指针函数:首先是一个函数,这个函数的返回值一个指针

 

用typedef声明一个函数指针

我们声明一个函数指针,正常方法是

int (*pfunc)(int a,int b)

当我们命名很多个函数指针的时候,用上面的方法显得非常不方便,所以我们可以这样做

typedef int (*PF) (int a,intb)
PF pfunc;

 

例程:

#include "stdio.h"typedef int(*PF)(int, int);int add(int a, int b)
{return a + b;
}int reduce(int a, int b)
{return a - b;
}int main()
{PF pfunc = NULL;pfunc = add;printf("add:%d\n",pfunc(3, 4));pfunc = reduce;printf("reduce:%d\n", pfunc(3, 4));/*getchar是用VS编写方便查看输出*/getchar();return 0;
}

 

欢迎关注微信公众号-嵌入式Linux

觉得不错,请帮忙转发,点赞,您的每一次支持,我都将铭记于心

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jsp人事管理系统_Jsp+Ssm+Mysql实现的医院人事管理系统源码附带视频运行教程

项目地址:jspssmmysql实现的医院人事管理系统源码附带视频运行教程|猿来入此【beta】多用户版IT项目教程源码分享网站​www.yuanlrc.com今天给大家演示的是一款由jspssm(springspringMVCmybatis)实现的医院人事管理系统,系统比较简…

RK3288/RK3399 CPU定频方法

直接上方法 查看cpu能支持的频率 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies 写入userspace说明要用户设定频率 echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor 写入上面列出的cpu频率 echo 1608000 > …

notepad++正则表达式去掉关键字所在行

如下图 1、选择正则表达式 2、选择匹配大小写 3、^(.*)KERNEL(.*)$\n 加上\n就是把去除的行删除,不加就算把删除的行替换为空格

深度学习·理论篇(2023版)·第003篇深度学习和计算机视觉中的基础数学知识02:特征向量和特征值+矩阵乘法的几何意义(2)+奇异值分解+线性可分性和维度+非线性变换

💕恭喜本博客浏览量达到两百万,CSDN内容合伙人,CSDN人工智能领域实力新星~ 🧡本文章为2021版本迭代更新版本,在结合有效知识的基础上对文章进行合理的增加,使得整个文章时刻顺应时代需要 🧡本…

Oracle 控制文件管理

控制文件是一个很小的二进制文件(10MB左右),含有数据库结构信息,包括数据文件和日志文件信息。控制文件在数据库创建时被自动创建,并在数据库发生物理变数时更新。控制文件被不断更新,在任何时候都要保证控制文件可用,…

数组超过预设的最大数组大小_工作表数组大小的扩展及意义

朋友们好,今日给大家继续讲解VBA数组与字典解决方案的第17讲,数组大小的扩充问题。这一讲的内容相对比较简单,在之前的章节中讲了数组与数组的计算规律,也是利用了数组的扩展原理。其实,两个数组计算时,参与…

Android ANR 实例分析

什么是ANR? 以下四个条件都可以造成ANR发生: InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件BroadcastQueue Timeout :在执行前台广播(BroadcastReceiver)的onReceive()函数时10秒没…

【GIT 基础篇六】分支管理(创建与合并)

上篇我们整理了如何创建远程仓库,以及如何将本地文件上传至远程仓库,仓库创建好了,我们接下来就要准备开发了,对于使用git而言,通常的习惯就是一人一个分支,等测试无误再合并;又或者根据需求创建…

git 命令汇总

瞎扯 最近有几个留言想让写下git的内容,git是一个工具,主要是用来管理码农的代码的,理由很简单,码农写的代码太多,自己都不知道可能哪里出现了Crash。Linux也是因为git的出现,可以让世界上越来越多的人维护…

我的最佳队友之K8无线蓝牙键盘深度使用测评( Keychron K8 )

K8 无线蓝牙键盘深度使用测评( Keychron K8 )——500 元左右最适配 Mac 电脑的机械键盘 0.键盘参数: 首先我们在实际测评之前,看下这个键盘的具体参数,心里有个大致的了解~ 87键 国产佳达隆G轴 可选茶轴/红轴/青轴 蓝…

你见过哪些操蛋的代码?

NO.1#define TRUE FALSE //Happy debugging suckers快乐的去调试你的代码吧,哈哈NO.2#define NULL (::rand() % 2) // would be quite nice aswell嗯,这个代码也很不错NO.3#define if( if(!卧槽,这个代码更加叼,哈哈&#xff…

后序线索树怎样画图_算法新解刘新宇(二)二叉搜索树:数据结构中的“hello world”...

二叉搜索树BST定义:基于广义二叉树,一颗二叉树定义:或者为空 或者包含三部分:一个值,一个左分支和一个右分支。这两个分支也都是二叉树分支。一颗二叉搜索树是满足下面条件的二叉树:所有左分支的值都小于本…

Android 亮屏速度分析总结

前面聊的 最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路。 计算按下power键到亮屏的时间 Android 唤醒时间统计 刚开始的时…

英语学习中总结的阅读、段落匹配、选词填空技巧

1 阅读题 一般五道题都是围绕主旨来问的,所以后四个问题也能帮助第一题的解答,找共有词~~~串起来 文章一般都是新旧观点的碰撞,所以有时候他问的是旧观点,要看清楚他问的是新观点还是旧观点,这是个陷阱~ 2 段落匹配 反…

sql 账号查询一个表查询权限_一个查询语句引发的问题以及巨型表相关操作探索与思考...

背景:关于这个标题想了试了好几个总觉得欠那么点意思。大致情况是,在某服务支持中,1张大表4.5T左右,该表也是分区表。其中一个执行频繁的SQL写法有很大问题,导致巨表全量扫描,造成IO负载很大,业…

Android 亮屏速度分析

前面聊的最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路。计算按下power键到亮屏的时间Android 唤醒时间统计刚开始的时候&…

container_of实例

1 前面说的 container_of 在linux内核代码里面使用非常多,对于喜欢linux编程的同学来说,对这个函数要非常清楚他的使用方法,而且还要知道他的原理,这对以后看内核代码,写内核驱动的帮助都非常大,当然&…

Git 分布式版本控制工具 03Git常用命令:Git全局设置+本地与远程仓库操作获取Git仓库+标签操作+忽略名单+工作区、暂存区、版本库+分支操作+暂时保存

Git常用命令目录4 Git常用命令4.1 Git全局设置4.2 获取Git仓库4.2.1 在本地初始化Git仓库4.2.2 从远程仓库克隆4.3 常见的概念:工作区、暂存区、版本库4.4 常见的概念:Git工作区中文件的状态4.5 本地仓库操作4.5.1 git status4.5.2 git add4.5.3 git res…

matlab dir函数_MATLAB自动管理文件

MATLAB自动管理文件1. MATLAB中路径设置(1)cd:用于切换当前工作目录示例:将当前工作目录切换到D:\Documents\MATLAB\Matlab test\study下。代码:cd (D:\Documents\MATLAB\Matlab test\study)(2)path:用于对搜索路径的操作示例:先查看当前所有的文件路径&…

Git 分布式版本控制工具 04Gitcode案例:多人协作开发流程+创建仓库+拉取操作+克隆仓库+拉取远程仓库中最新的版本+修改拉取的本地代码

文章目录5. Gitcode5.1 多人协作开发流程5.2 创建仓库5.3 拉取操作5.3.1 克隆仓库5.3.2 拉取远程仓库中最新的版本5.4 修改拉取的本地代码5.5 解决冲突5.6 跨团队协作5. Gitcode 在版本控制系统中,大约90%的操作都是在本地仓库中进行的:暂存&#xff0c…