c/c++函数指针(Hook前奏1)
文章目錄
- 一、定義
- 注意
- 二、聲明方法
- 代碼實(shí)現(xiàn):
- [c/c++ typedef定義函數(shù)指針(Hook前奏2)](https://blog.csdn.net/CSNN2019/article/details/112498418)
一、定義
函數(shù)指針是指向函數(shù)的指針變量。 因此“函數(shù)指針”本身首先應(yīng)是指針變量,只不過該指針變量指向函數(shù)。
注意
函數(shù)指針和指針函數(shù)區(qū)別:其實(shí)大家不用刻意去記憶,因?yàn)槎际?strong>強(qiáng)調(diào)最后兩個(gè)字。
函數(shù)指針,最后兩個(gè)字是指針,因此它是指針變量,只不過這指針指向了函數(shù);例如:
int(* fun)(int x,int y)指針函數(shù),最后兩個(gè)字是函數(shù),因此它是一個(gè)函數(shù),只不過返回值是一個(gè)指針。例如:
int* fun(int x,int y)個(gè)人理解:
其實(shí)也就是一個(gè) * 的緣故,未加() 的話,那么 * 就會(huì)和int結(jié)合,返回值就變成了int *,即返回值是int * 的fun函數(shù);如果加了(),那么* 和fun結(jié)合,即 * fun指針,它指向了一個(gè)返回值是int且有兩個(gè)int參數(shù)的函數(shù)。
二、聲明方法
返回值類型 ( * 指針變量名) ([形參列表]);
例如:
int add(int x,int y); /* 聲明一個(gè)函數(shù) */ int (*pf1) (int x,int y); /* 聲明一個(gè)函數(shù)指針 */ pf1=add; /* 將func函數(shù)的首地址賦給指針f */或者:
pf1 = &add;這兩者有什么區(qū)別呢?
這是pf1 = add;的情況
下面這是pf1 = &add;的情況
注:pf兩端的括號(hào)必不可少,如果不寫這對(duì)括號(hào),則pf是一個(gè)返回值為int * 的函數(shù)。
代碼實(shí)現(xiàn):
#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定義函數(shù)指針(Hook前奏2)
總結(jié)
以上是生活随笔為你收集整理的c/c++函数指针(Hook前奏1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年1月10日停电感慨
- 下一篇: typedef的详细用法