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个整型元素的数组的引用 和 返回一个含 ...
随机推荐
- const_cast去除const限制,同一片内存
本质很简单,但一些优化 和 编程上的错误,却让人看不清本质. :const_cast<type_id> (expression) 该运算符用来修改类型的const或volatile属性.除 ...
- 安装 redis [standlone模式]
下载redis版本:https://redis.io/download 我下载的是:redis-3.0.6 下载后,在linux上 tar -zxvf redis-3.0 ...
- Unicode utf8等编码类型的原理
1.ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte). ...
- jfreechart时序图 demo
import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.io.FileNotFoundExce ...
- python#模拟发送电子邮件
#-*- coding:utf-8 -*- #模拟发送电子邮件 from email.mime.text import MIMEText from_addr = 'aa@sss.com' passwo ...
- 一次 read by other session 的处理过程
一个哥们给我打电话.他说系统中一直出现等待事件 read by other session .而且该等待都是同一个sql引起的.比較紧急,请我帮忙远程看看. 远程过去之后,用脚本把 等待事件给抓 ...
- volley全然解析
一.volley是什么? 1.简单介绍 Volley是Goole在2013年Google I/O大会上推出了一个新的网络通信框架,它是开源的.从名字由来和配图中无数急促的火箭能够看出 Volley ...
- iOS 企业版 安装失败 原因
首先要吐槽下国内的论坛水分略多,以下问题大多是查询stackoverflow等论坛解决的.推荐一款软件,Log Guru,用来查看app安装时的系统日志,很多问题要看日志才知道错误点. 1.首先有几 ...
- Python 字符串拼接、格式化输出、深浅复制
拼接:"+"号(同类型可拼接) >>>li = [1,2] >>>li + li [1,2,1,2] >>>li*2 [1,2 ...
- POJ 1694 An Old Stone Game【递归+排序】
链接: http://poj.org/problem?id=1694 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27454#probl ...