一个简单的函数指针测试例子
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存的是指针副本,指向的还是原来的函数入口地址。
以上是关于一个简单的函数指针测试例子的主要内容,如果未能解决你的问题,请参考以下文章