C++函数指针记录

2021/10/1 17:10:51

本文主要是介绍C++函数指针记录,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 1 #include <iostream>
 2 using namespace std;
 3 #include <conio.h>
 4  
 5 int max(int x, int y); //求最大数
 6 int min(int x, int y); //求最小数
 7 int add(int x, int y); //求和
 8 void process(int i, int j, int (*p)(int a, int b)); //应用函数指针
 9  
10 int main()
11 {
12     int x, y;
13     cin>>x>>y;
14  
15     cout<<"Max is: ";
16     process(x, y, max);
17  
18     cout<<"Min is: ";
19     process(x, y, min);
20  
21     cout<<"Add is: ";
22     process(x, y, add);
23  
24     getch();
25     return 0;
26 }
27  
28 int max(int x, int y)
29 {
30     return x > y ? x : y;
31 }
32  
33 int min(int x, int y)
34 {
35     return x > y ? y : x;
36 }
37  
38 int add(int x, int y)
39 {
40     return x + y;
41 }
42  
43 void process(int i, int j, int (*p)(int a, int b))
44 {
45     cout<<p(i, j)<<endl;
46 }

这份代码,应该是网上找的,非常清晰的关于函数指针的例子。

 1 #include<iostream>
 2 #include "windows.h"
 3 using namespace std;
 4 int main()
 5 {
 6     typedef void (*Hello)();
 7     HMODULE hMod = LoadLibrary("test.dll");
 8     if(hMod!=NULL)
 9     {
10         Hello hello = (Hello)GetProcAddress(hMod,"test");//void test(); 可以理解为取test()函数地址 
11         hello();
12         cout<<"加载成功";
13     }
14     else
15     {
16         cout<<"加载失败";
17     }
18 }

加载动态库的时候,也是使用函数指针的方式。

 1 #include<iostream>
 2 #include "windows.h"
 3 using namespace std;
 4 
 5 void he()
 6 {
 7     MessageBox(0, "Hello World from DLL!\n","Hi",MB_ICONINFORMATION);
 8 }
 9 int main()
10 {
11     typedef void (*Hello)(void (*p)());
12     HMODULE hMod = LoadLibrary("test.dll");
13     if(hMod!=NULL)
14     {
15         Hello hello = (Hello)GetProcAddress(hMod,"test");//调用dll的时候,也可以传个函数地址过去,在dll里面运行 
16         hello(&he);
17         cout<<"加载成功";
18         while(true){
19         }
20     }
21     else
22     {
23         cout<<"加载失败";
24     }
25 }

调用dll也是可以传递函数指针的。



这篇关于C++函数指针记录的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程