c/c++函数指针(Hook前奏1)
生活随笔
收集整理的這篇文章主要介紹了
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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年1月10日停电感慨
- 下一篇: typedef的详细用法