码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-03-30 13:15:42      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:code   ima   gtest   分享   函数   .com   地址   pre   保存   

一般函数指针的一个简单测试。将函数放到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存的是指针副本,指向的还是原来的函数入口地址。

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

标签:code   ima   gtest   分享   函数   .com   地址   pre   保存   

原文地址:http://www.cnblogs.com/lan0725/p/6645476.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!