一个简单的函数指针测试例子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个简单的函数指针测试例子相关的知识,希望对你有一定的参考价值。

一般函数指针的一个简单测试。将函数放到vector里面,将函数作为形参。

 1 typedef void(*GTestFunPtr)(int, int);
 2 
 3 void test1(int a, int b)
 4 {
 5     std::cout << "test1:" << a + b << std::endl;
 6 }
 7 
 8 void test2(int a, int b)
 9 {
10     std::cout << "test2:" << a * b << std::endl;
11 }
12 
13 void test3(int a, int b)
14 {
15     std::cout << "test3:" << a - b << std::endl;
16 }
17 
18 void tetPtr(GTestFunPtr f, int a, int b)
19 {
20     (*f)(a, b);
21 }
22 
23 int main()
24 {
25     std::vector<GTestFunPtr> v;
26     std::cout << "test1:" << test1 << ", &test1" << &test1 << std::endl;
27     std::cout << "test2:" << test2 << ", &test2" << &test2 << std::endl << std::endl;
28     v.push_back(test1);
29     v.push_back(&test1);
30     v.push_back(test2);
31     v.push_back(&test2);
32 
33     std::cout << "print vector<GTestFunPtr>:" << std::endl;
34     for (std::vector<GTestFunPtr>::iterator it = v.begin(); it != v.end(); ++it)
35     {
36         std::cout << "&it:" << &it << ",&(*it):" << &(*it) << ",*it:" << *it << ",func=>";
37         (*it)(1, 2);
38     }
39 
40     std::cout << std::endl << "test argu" << std::endl;
41     tetPtr(test3, 10, 5);
42     return 0;
43 }

运行结果如下:

技术分享

 

简单结论:

1 直接使用函数名字还是&函数名字,得到的都是函数的入口地址。

2 迭代器变量本身的地址是不变的,只是它保存的值是变化的。

3 vector存的是指针副本,指向的还是原来的函数入口地址。

以上是关于一个简单的函数指针测试例子的主要内容,如果未能解决你的问题,请参考以下文章

更新:C++ 指针片段

Objective-C Block与函数指针比较

-> 在智能指针中的使用

在android中显示隐藏片段

postman测试实例--断言

片段中的TextView在Android Studio中返回Null