c/c++函数指针(Hook前奏1)
文章目录
- 一、定义
- 注意
- 二、声明方法
- 代码实现:
- [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)相关推荐
- c/c++ typedef定义函数指针(Hook前奏2)
文章目录 简介 为什么一定要使用 typedef 定义函数指针呢? 简介 关于函数指针的介绍,点击超链接即可查看,这里就不做过多说明了,或者可以点击这里: https://blog.csdn.net/ ...
- c++虚函数的前奏--函数指针与回调
声明函数指针并实现回调 程序员常常需要实现回调.本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调.注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另 ...
- c++类成员函数指针
文章目录 提出疑问 c++层面 非虚函数 虚函数 ida动调分析 非虚函数 虚函数 近一步解释 c++代码 ida调试 注意 提出疑问 首先问大家一句,什么是函数指针? 肯定有的人会这样回答,函数指针 ...
- boost源码剖析之:泛型函数指针类boost::function(rev#3)
boost源码剖析之:泛型函数指针类boost::function(rev#3) 刘未鹏 C++的罗浮宫(http://blog.csdn.net/pongba) Note: 并非新作,03年曾放 ...
- C++:函数指针,回调函数
#include <iostream> using namespace std;void fun1() {cout << "fun1" << e ...
- C语言_函数指针高级用法
什么是函数指针? 函数是计算机程序中一段可执行代码的封装,当程序运行时函数会被加载到内存布局中的代码段位置,这段代码会有一段内存空间,有内存空间就会有地址,这段内存空间的首地址,就是函数的地址 每当我 ...
- RTT设置删除空闲钩子函数想到函数指针和回调函数
目录 一.概述 二.函数指针 2.1 函数指针的使用 2.2 * (int * )&p 三.回调函数 一.概述 学习RTT时,看到设置和删除空闲钩子函数接口: rt_err_t rt_thre ...
- C++中的函数指针与宏函数总结
1.函数指针 今天看项目代码才发现,函数指针分两种:普通函数指针,类成员函数指针. 那这两中函数指针的定义方法是不一样的. 1.1.普通函数指针 typedef void (*Dfun) (float ...
- c/c++中的函数指针和指针函数
定义 1.指针函数,本质是函数,返回值为指针,形如,int *pfun(int, int),由于"*"的优先级低于"()"的优先级,所以等同于int *(pfu ...
最新文章
- Windows CE Notification API的使用方法
- Linux中Oracle的sqlplus下退格和Del键无效的问题解决
- [css] css的加载会阻塞DOM树解析和渲染吗?为什么
- c语言最小点对问题_7.4 图的连通性问题
- 第五话 Asp.Net MVC 3.0【MVC实战项目の一】
- oracle 判断为空赋一个值_求高手帮忙,oracle查出的值为null,怎么赋初始值?
- CSS基础part1
- 线段树详解 二 ----(区间修改区间查询)
- 使用laypage和pageHelper分页
- GPS学习之二:AGPS,GPS,DGPS 认识
- 移动硬盘计算机无法打开硬盘,win10系统电脑无法打开移动硬盘的详细步骤
- C# 操作Word文本框——插入图片、表格、文字、超链接等
- 学会这10种定时任务,我有点飘了
- 基于Apache APISIX,新浪微博API网关的定制化开发之路
- 实现点击图片放大查看功能
- 关于游戏技术发展的一些里程碑的技术
- 关于如何下载E都市三维地图的教程
- 安装homebrew cask报错问题
- 微软Surface RT平板电脑上手体验报告
- 22届硕士,去年秋招拿了字节跳动offer,有一说一,不是很难进
热门文章
- 用php写shell,php与shell实现多线程的简单例子
- 成功解决ValueError: DataFrame.dtypes for data must be int, float or bool.Did not expect the data types
- 成功解决explicit device specific/device:GPU:0' because no supported kernel for GPU devices is available.
- 安装nvidia-docker2
- 关于webpack一些路径
- Windows下安装Apache 2.2.21图文教程
- mysql数据库的增删改查
- python中strip(),lstrip(),rstrip()函数的讲解
- MaxAlertView 强大的弹框试图
- 【解决办法】Oracle登录报错ORA-28000: the account is locked