日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c/c++函数指针(Hook前奏1)

發(fā)布時(shí)間:2025/3/21 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c/c++函数指针(Hook前奏1) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、定義
    • 注意
  • 二、聲明方法
  • 代碼實(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。