C++指向函数的指针
直接上代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std; typedef int(*PF)(int *, int);
typedef bool (*cmpFcn)(const string&, const string&);
bool lenthCompare(const string& s1, const string& s2)
{
return s1.size() == s2.size();
} string::size_type sumLength(const string& s1, const string& s2)
{
return s1.size() + s2.size();
} bool cstringComare(char *s1, char* s2)
{
return strlen(s1) + strlen(s2);
}
//第三个参数是一个函数指针
void useBigger(const string& s1,
const string& s2,
bool(*pf)(const string&, const string&))
{
cout << pf(s1, s2) << endl;
} int demo(int *p, int a)
{
return ;
}
//函数的指针也可以作为函数的返回结果:
//ff是一个函数,有一个形参x,返回结果是一个函数指针,返回的函数指针指向这样一个类型:int(*)(int *,int)
//int (*ff(int x))(int*, int)
//上一句简写为下面这一句:
PF ff(int x)
{
cout << x << endl;
return demo;
} void ff(vector<double>vec)
{
cout << "ff(vector<double>vec)" << endl;
} void ff(unsigned int x)
{
cout << "ff(unsigned int x)" << endl;
} int main()
{
//pf5是一个指针,它指向具有一个形参函数
//void(*pf5)(int) = &ff;//指向的重载函数里面,必须有一个是精确匹配
//double(*pf6)(vector<double>) = &ff;//指向的重载函数里面,必须有一个是精确匹配!所以这样的也不行
void(*pf8)(unsigned int y) = &ff;//可以
void(*pf7)(vector<double>) = &ff;//可以 int a = ;
int* pa;
/*
cmpFcn pf4 = lenthCompare;
useBigger("Hi", "function", pf4);
getchar();
return 0;
*/
//直接传函数的名称:
useBigger("Hi", "function", lenthCompare);
cout << ff()(&a,a) << endl;
getchar();
return ;
//pf是一个指针,指向函数的指针
//pf是一个局部变量
//bool(*pf)(const string&, const string&);
//bool(*pf2)(const string&, const string&);
//bool(*pf3)(const string&, const string&);
cmpFcn pf;
cmpFcn pf2=;
cmpFcn pf3=;
pa = &a;
//pf = &lenthCompare;//把函数的地址付给指针pf
pf = lenthCompare;//上一句可以这样简写
pf2 = lenthCompare;
pf3 = pf2;//用一个指针赋值给另外一个指针
//pf3 = sumLength;//不可以,不同的函数类型!
//pf3 = cstringComare;//不可以,不同的函数类型!
//cout << lenthCompare("hello", "wdddorld") << endl;
cout<<(*pf)("hello", "worlddd") << endl;
cout << pf2("hello", "worlddd") << endl; useBigger("hi", "function", lenthCompare); cout << *pa << endl;
system("pause");
return ;
}
本例来自:https://www.bilibili.com/video/av37315901?from=search&seid=11705131729614210830
C++指向函数的指针的更多相关文章
- C语言中 指向函数的指针 简介
引子:在学习CPrimerPlus的第十四章的14.13节中,遇到了如下三行文字,是有关指向函数的指针的,把我搞晕了. char * fump(); //返回指向char的指针的函数 char (* ...
- 12-返回指针的函数&&指向函数的指针
前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...
- 【C语言】14-返回指针的函数与指向函数的指针
前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如 ...
- 指向函数的指针与iOS-Block相关知识
指向函数的指针与iOS-Block相关知识 一. 函数指针的定义和调用: 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/ ...
- 指向函数的指针数组(C++)
我们能够创建一个指向函数的指针数组.为了选择一个函数,只需要使用数组的下标,然后间接引用这个指针.这种方式支持表格式驱动码的概念:可以根据状态变量去选择被执行函数,而不用条件语句或case语句.这种设 ...
- 【学习笔记】【C语言】指向函数的指针
每个函数都有自己的内存地址,指针保存了函数的地址后就能指向函数了. #include <stdio.h> double haha(double d, char *s, int a) { } ...
- C++学习笔记:指向函数的指针
#include <stdio.h> int sum(int a, int b) { return a+b; } int minus(int a, int b) { return a-b; ...
- 指向函数的指针 分类: C/C++ 2015-07-13 11:03 14人阅读 评论(0) 收藏
原文网址:http://www.cnblogs.com/zxl2431/archive/2011/03/25/1995285.html 讲的很清楚,备份记录. (一) 用函数指针变量调用函数 可以用指 ...
- 《C++ Primer》之指向函数的指针
函数指针是指指向函数而非指向对象的指针.像其他指针一样,函数指针也指向某个特定的类型.函数类型由其返回类型以及形参表确定,而与函数名无关: // pf points to function retur ...
- C++ —— 返回数组指针的函数 和 返回指向函数的指针的函数
返回数组指针的函数 基础知识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用. 定义一个 返回数组指针的函数 的方法,以 一个接收参数为 含有10个整型元素的数组的引用 和 返回一个含 ...
随机推荐
- Java中HashTable和HashMap的区别
在Java中,HashTable和HashMap都是哈希表,那么它们有什么区别呢? 1.它们所继承的类不一样. HashTable和HashMap都实现了Map接口,但是它们所继承的类时不同的.H ...
- Junit内部解密之四: Junit单元测试最佳实践
我们做使用Junit工具来做单页测试或接口测试时,需要注意一些问题,包括我们的编码规范,test规范,以及编写测试代码的策略,以下个人的总结. 1.为还没有实现的测试代码抛出一个异常.这就避免了该测试 ...
- hadoop常见算法(持续更新)
1. 对以下数据进行排序,根据收入减去支出得到最后结余从大到小排序 账号 收入 支出 日期 zhangsan@163.com 6000 0 2014-02-20 lisi@163.com 2000 0 ...
- saltstack内置state模块user
user 模块是用来创建用户和管理用户设定的,用户可以被设置成 present 状态或者 absent 状态. hwg: user.present: - fullname: Jim - shell: ...
- PHP-Manual的学习----【序言】
2017年6月27日16:57:32 学习资料:2015-PHP-Manual 打好坚实的基础是做任何事的前提 序言: 笔记: 1.PHP,即"PHP: Hypertext Preproce ...
- POJ1850&&POJ1496
Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9236 Accepted: 4405 Description ...
- An Ordinary Game(简单推导)
An Ordinary Game Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement There ...
- Java程序发送邮件
之前上网有看到过别人总结的使用java程序发送邮件,于是自己下来练习,把自己学习的一些心得总结出来. 首先我们这里需要采用两个jar包: 需要的朋友可以自行上网去CSDN类似的网站上面找 顺便把自己测 ...
- elasticsearch从入门到出门-08-Elasticsearch容错机制:master选举,replica容错,数据恢复
假如: 9 shard,3 node Elasticsearch容错机制:master选举,replica容错,数据恢复 最佳分配情况: 这样分配之后,不管其中哪个node 宕机这个es 依然可以提供 ...
- git clone了整个远程仓库分支
git之远程标签下载(远程分支) 一般我们发布一个新版本到线上服务器时都会在版本库中打一个标签,这样我们可以随时查看这个打标签的版本,就是说标签其实是版本库中一个快照.git的标签与分支类似,区别是分 ...