前面说的话

面试的时候,经常有面试官问这个问题,在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

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

C/C++函数指针与指针函数相关推荐

  1. c/c++中的函数指针和指针函数

    定义 1.指针函数,本质是函数,返回值为指针,形如,int *pfun(int, int),由于"*"的优先级低于"()"的优先级,所以等同于int *(pfu ...

  2. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  3. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参

    1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...

  4. C指针6:指针变量作为函数参数

    在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着 ...

  5. C++成员变量指针和成员函数指针【The semantics of funcitons】

    原文:https://blog.csdn.net/laojiu_/article/details/68946915 (原文有笔误) 1. #include <cstdio> #includ ...

  6. 用指针、子函数的方法去一维数组中所有元素的平均值,并放在a[0]处

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p142 7.1.2 上级实训内容 [实训内容7]用指针.子函数的方法去一维数组中所有元素的平均值,并放 ...

  7. 函数指针与指针函数的区别

    原文:http://yliangliang.blog.sohu.com/86320000.html 一.函数指针 首先它是一个指针,只是这个指针指向的是一个函数.指针变量可以指向变量的地址.数组.字符 ...

  8. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  9. 初论函数指针、指针函数、指针的指针

    一.指针函数 1.定义 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 函数返回值类型 函数名(参数表) int * f(int x,int y); //函数返回值类型是in ...

  10. c c++ 函数内数组初值_C/C++函数指针与指针函数

    关于指针,前面文章C语言指针详解有过介绍,这里主要讨论函数指针和指针函数. 1 什么是指针? 定义:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量; 上面一个 4GB 的内存可以存放 ...

最新文章

  1. tornado简单实现restful接口2
  2. adadelta算法_神经网络中常用的优化算法
  3. Cluster coefficient的理解
  4. Django非常简单的安装方法
  5. 深度学习(18)神经网络与全连接层一: 数据加载
  6. 深入理解Magento – 第五章 – Magento资源配置
  7. 几种简单的社交网站的标志按钮
  8. 【opencv图像基础】图像常见的通道模式:RGB、YUV、HSV
  9. abaqus推荐用哪一版本的_ABAQUS推荐资料合集(一)
  10. 看到大家在讨论阿拉伯数字-》汉字数字的转换,拿出我去年写的C版本
  11. 种子编辑 android6,360种子编辑器安卓APK下载-360种子在线编辑器手机版下载v1.0 Android版-腾牛安卓网...
  12. 电力线通信技术的发展
  13. 单片机C语言流水灯花样编程,单片机C语言程序设计:花样流水灯
  14. CentOS下用命令查看IP地址
  15. 注意力机制(Attention)
  16. PyTorch中的topk方法以及分类Top-K准确率的实现
  17. 如何发现程序中的错误
  18. python renamer_Python sys.meta_path方法代码示例
  19. JAMA Neurology:帕金森病跨疾病阶段的新兴神经成像生物标记物
  20. NY8A050D 6 I/O 8-bit EPROM-Based MCU 台湾九齐单片机

热门文章

  1. 主机Window不能访问该虚拟机Linux Samba文件服务提供了一个文件夹
  2. 汇编调用c函数为什么要设置栈
  3. ARP 地址解析协议
  4. 2010软考软件设计师冲刺精选【专家压轴模拟•下】
  5. 精妙的SQL语句收藏
  6. python根据财务指标寻找价值股票
  7. Android应用开发——onStop的调用时机
  8. python读写文件的文本模式_Python中文件的读写、写读和追加写读三种模式的特点...
  9. rabbitmq接口异常函数方法_RabbitMQ监控(三):监控队列状态
  10. java 自动装拆箱