文章目录

  • 一、定义
    • 注意
  • 二、声明方法
  • 代码实现:
  • [c/c++ typedef定义函数指针(Hook前奏2)](https://blog.csdn.net/CSNN2019/article/details/112498418)

一、定义

函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。

注意

函数指针和指针函数区别:其实大家不用刻意去记忆,因为都是强调最后两个字

函数指针,最后两个字是指针,因此它是指针变量,只不过这指针指向了函数;例如:

int(* fun)(int x,int y)

指针函数,最后两个字是函数,因此它是一个函数,只不过返回值是一个指针。例如:

int* fun(int x,int y)

个人理解:
其实也就是一个 * 的缘故,未加() 的话,那么 * 就会和int结合,返回值就变成了int *,即返回值是int *fun函数;如果加了(),那么* 和fun结合,即 * fun指针,它指向了一个返回值是int且有两个int参数的函数。

二、声明方法

返回值类型 ( * 指针变量名) ([形参列表]);

例如:

int add(int x,int y); /* 声明一个函数 */
int (*pf1) (int x,int y); /* 声明一个函数指针 */
pf1=add; /* 将func函数的首地址赋给指针f */

或者:

pf1 = &add;

这两者有什么区别呢?
这是pf1 = add;的情况

下面这是pf1 = &add;的情况

注:pf两端的括号必不可少,如果不写这对括号,则pf是一个返回值为int * 的函数

代码实现:

#include<stdio.h>
using namespace std;
struct  pointer {int (*pointerA) (int x,int y);int (*pointerB) (int x,int y);};
int add(int a, int b) {return (a + b);
}int subtraction(int a, int b) {return (a - b);
}int  main() {pointer pointers;pointers.pointerA = &add;int (*addB)(int a, int b);addB = add;int c =addB(2, 5);printf("%d\n", c);pointers.pointerB = &subtraction;printf("%d, %d", pointers.pointerA(1, 2), pointers.pointerB(2, 1));return 0;}

c/c++ typedef定义函数指针(Hook前奏2)

c/c++函数指针(Hook前奏1)相关推荐

  1. c/c++ typedef定义函数指针(Hook前奏2)

    文章目录 简介 为什么一定要使用 typedef 定义函数指针呢? 简介 关于函数指针的介绍,点击超链接即可查看,这里就不做过多说明了,或者可以点击这里: https://blog.csdn.net/ ...

  2. c++虚函数的前奏--函数指针与回调

    声明函数指针并实现回调 程序员常常需要实现回调.本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调.注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另 ...

  3. c++类成员函数指针

    文章目录 提出疑问 c++层面 非虚函数 虚函数 ida动调分析 非虚函数 虚函数 近一步解释 c++代码 ida调试 注意 提出疑问 首先问大家一句,什么是函数指针? 肯定有的人会这样回答,函数指针 ...

  4. boost源码剖析之:泛型函数指针类boost::function(rev#3)

    boost源码剖析之:泛型函数指针类boost::function(rev#3) 刘未鹏 C++的罗浮宫(http://blog.csdn.net/pongba)   Note: 并非新作,03年曾放 ...

  5. C++:函数指针,回调函数

    #include <iostream> using namespace std;void fun1() {cout << "fun1" << e ...

  6. C语言_函数指针高级用法

    什么是函数指针? 函数是计算机程序中一段可执行代码的封装,当程序运行时函数会被加载到内存布局中的代码段位置,这段代码会有一段内存空间,有内存空间就会有地址,这段内存空间的首地址,就是函数的地址 每当我 ...

  7. RTT设置删除空闲钩子函数想到函数指针和回调函数

    目录 一.概述 二.函数指针 2.1 函数指针的使用 2.2 * (int * )&p 三.回调函数 一.概述 学习RTT时,看到设置和删除空闲钩子函数接口: rt_err_t rt_thre ...

  8. C++中的函数指针与宏函数总结

    1.函数指针 今天看项目代码才发现,函数指针分两种:普通函数指针,类成员函数指针. 那这两中函数指针的定义方法是不一样的. 1.1.普通函数指针 typedef void (*Dfun) (float ...

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

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

最新文章

  1. Windows CE Notification API的使用方法
  2. Linux中Oracle的sqlplus下退格和Del键无效的问题解决
  3. [css] css的加载会阻塞DOM树解析和渲染吗?为什么
  4. c语言最小点对问题_7.4 图的连通性问题
  5. 第五话 Asp.Net MVC 3.0【MVC实战项目の一】
  6. oracle 判断为空赋一个值_求高手帮忙,oracle查出的值为null,怎么赋初始值?
  7. CSS基础part1
  8. 线段树详解 二 ----(区间修改区间查询)
  9. 使用laypage和pageHelper分页
  10. GPS学习之二:AGPS,GPS,DGPS 认识
  11. 移动硬盘计算机无法打开硬盘,win10系统电脑无法打开移动硬盘的详细步骤
  12. C# 操作Word文本框——插入图片、表格、文字、超链接等
  13. 学会这10种定时任务,我有点飘了
  14. 基于Apache APISIX,新浪微博API网关的定制化开发之路
  15. 实现点击图片放大查看功能
  16. 关于游戏技术发展的一些里程碑的技术
  17. 关于如何下载E都市三维地图的教程
  18. 安装homebrew cask报错问题
  19. 微软Surface RT平板电脑上手体验报告
  20. 22届硕士,去年秋招拿了字节跳动offer,有一说一,不是很难进

热门文章

  1. 用php写shell,php与shell实现多线程的简单例子
  2. 成功解决ValueError: DataFrame.dtypes for data must be int, float or bool.Did not expect the data types
  3. 成功解决explicit device specific/device:GPU:0' because no supported kernel for GPU devices is available.
  4. 安装nvidia-docker2
  5. 关于webpack一些路径
  6. Windows下安装Apache 2.2.21图文教程
  7. mysql数据库的增删改查
  8. python中strip(),lstrip(),rstrip()函数的讲解
  9. MaxAlertView 强大的弹框试图
  10. 【解决办法】Oracle登录报错ORA-28000: the account is locked