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

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

时间: 2024-12-18 10:48:28

一个简单的函数指针测试例子的相关文章

一个完整的使用成员函数指针的例子

Screen.h #ifndef SCREEN_H #define SCREEN_H #include <string> class Screen { public: typedef std::string::size_type pos; // Action is a type that can point to a member function of Screen // that returns a reference to a Screen and takes no arguments

【C++】编写一个简单的函数实现重载。

//编写一个简单的函数实现重载. #include <iostream> using namespace std; int max(int a,int b) { return a>b?a:b; } int max(int a,int b,int c) { int x=max(a,b); return max(x,c); } double max(double a,double b) { return a>b?a:b; } int main() { cout<<"

jfinal初接触,一个简单的文件上传例子

写了个上传的小例子. 从jfinal官网下载jfinal-1.8_demo_for_jsp.zip 然后下载jfinal-1.8-lib.zip 按要求删掉该删除的,引入一些包,之后的项目结构: DemoConfig.java中配置路由,只留下了根路径: /** * 配置路由 */ public void configRoute(Routes me) { me.add("/", CommonController.class); //me.add("/blog", B

一个简单的 ASP.NET MVC 例子演示如何在 Knockout JS 的配合下,使用 TypeScript 。

前言 TypeScript 是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构师,已工作于TypeScript的开发.TypeScript扩展了 JavaScript 的句法,所以任何现有的JavaScript程序可以不加改变的在TypeScript下工作.TypeScript是为大型应用之开发而设计,而编译时它产生 JavaScript 以确保兼容性.TypeScript

CSS布局中一个简单的应用BFC的例子

什么是BFC BFC(Block Formatting Context),简单讲,它是提供了一个独立布局的环境,每个BFC都遵守同一套布局规则.例如,在同一个BFC内,盒子会一个挨着一个的排,相邻盒子的间距是由margin决定且垂直方向的margin会重叠.而float和clear float也只对同一个BFC内的元素有效. 什么情况产生BFC W3C标准中这样描述:Floats, absolutely positioned elements, block containers (such as

C++使用简单的函数指针

函数指针: 被调用函数指针必须包括函数的存储器地址,为了正常工作,指针还必须包括其它信息,这一参数列表指针的参数类型和返回类型的函数. 因此,当你声明一个函数指针,数的參数类型和返回类型.以及指针名. 函数指针的一般形式例如以下: 返回类型(*指针明名)(參数类型列表); 注意:指针名上的括号是不可缺少的.否则*就会与返回类型结合,就成了一个函数原型了. 演示样例: #include <iostream> using std::cout; using std::endl; //函数声明 lon

IMP本质上是一个通用的函数指针

IMP:通用的函数指针 /// A pointer to the function of a method implementation. #if !OBJC_OLD_DISPATCH_PROTOTYPES typedef void (*IMP)(void /* id, SEL, ... */ ); #else typedef id (*IMP)(id, SEL, ...); #endif #if !OBJC_OLD_DISPATCH_PROTOTYPES OBJC_EXPORT void ob

一个简单的Spring MVC的例子

一.Spring MVC的优点 1.Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多.呵呵,当然这不是决定因素. 2.Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分) 3.Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制. 二.简单的例子 1.配置web.xml 指除了Control层外

7.qfilesystemmodel rowcount 为什么为0? 一个简单的model类的例子

任务: 1.新建一个空的mainwindow项目 2.debug下编译得到一个文件夹,应用程序输出这个文件夹中的文件(不显示文件夹中的文件夹) 3.使用QFileSystemModel完成. 本例显示结果: Makefile Makefile.Debug Makefile.Release ui_mainwindow (debug和release是文件夹,不在应用程序输出中) mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #inclu