直接上代码:

#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++指向函数的指针的更多相关文章

  1. C语言中 指向函数的指针 简介

    引子:在学习CPrimerPlus的第十四章的14.13节中,遇到了如下三行文字,是有关指向函数的指针的,把我搞晕了. char * fump(); //返回指向char的指针的函数 char (* ...

  2. 12-返回指针的函数&&指向函数的指针

    前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针   一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...

  3. 【C语言】14-返回指针的函数与指向函数的指针

    前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如 ...

  4. 指向函数的指针与iOS-Block相关知识

    指向函数的指针与iOS-Block相关知识 一. 函数指针的定义和调用: 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/ ...

  5. 指向函数的指针数组(C++)

    我们能够创建一个指向函数的指针数组.为了选择一个函数,只需要使用数组的下标,然后间接引用这个指针.这种方式支持表格式驱动码的概念:可以根据状态变量去选择被执行函数,而不用条件语句或case语句.这种设 ...

  6. 【学习笔记】【C语言】指向函数的指针

    每个函数都有自己的内存地址,指针保存了函数的地址后就能指向函数了. #include <stdio.h> double haha(double d, char *s, int a) { } ...

  7. C++学习笔记:指向函数的指针

    #include <stdio.h> int sum(int a, int b) { return a+b; } int minus(int a, int b) { return a-b; ...

  8. 指向函数的指针 分类: C/C++ 2015-07-13 11:03 14人阅读 评论(0) 收藏

    原文网址:http://www.cnblogs.com/zxl2431/archive/2011/03/25/1995285.html 讲的很清楚,备份记录. (一) 用函数指针变量调用函数 可以用指 ...

  9. 《C++ Primer》之指向函数的指针

    函数指针是指指向函数而非指向对象的指针.像其他指针一样,函数指针也指向某个特定的类型.函数类型由其返回类型以及形参表确定,而与函数名无关: // pf points to function retur ...

  10. C++ —— 返回数组指针的函数 和 返回指向函数的指针的函数

    返回数组指针的函数 基础知识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用. 定义一个 返回数组指针的函数 的方法,以 一个接收参数为 含有10个整型元素的数组的引用  和 返回一个含 ...

随机推荐

  1. HTML_<a>

    1.在a标签中调用js函数最适当的方法推荐使用: (1) a href="javascript:void(0);" onclick="js_method()" ...

  2. man page及info page用法

    Linux系统的在线求助man page与info page 先来了解一下Linux有多少命令呢?在文本模式下,你可以直接按下两个[Tab]按键,看看总共有多少命令可以让你用? [vbird@www ...

  3. PHP代码中使用post参数上传大文件

    今天连续碰到了两个同事向我反应上传大文件(8M)失败的事情! 都是在PHP代码中通常使用post参数进行上传文件时,当文件的大小大于8M时,上传不能不成功. 首先,我想到了nginx的client_m ...

  4. 【整理】Android中EditText中的InputType类型含义与如何定义( 转 )

    转自:[整理]Android中EditText中的InputType类型含义与如何定义 用到的时候查到了这篇文章觉得很不错,就在此记录下. [背景] 经过一些Android中EditText方面的折腾 ...

  5. c语言三元组

    // Triplet.cpp : 定义控制台应用程序的入口点.//#include "stdio.h"#include "stdlib.h"#define OK ...

  6. centos7.0 activemq的安装

    1:下载地址http://activemq.apache.org/activemq-590-release.html 2:wget http://archive.apache.org/dist/act ...

  7. Linux的分区

    1.磁盘分区 主分区: 最多只能有4个 扩展分区: 最多只能有1个 主分区加扩展分区最多只能有4个 不能写入数据,只能包含逻辑逻辑分区 逻辑分区: 磁盘号从5开始,只要看到磁盘号是5,一定是逻辑分区 ...

  8. 程序运行之ELF 符号表

    当一个工程中有多个文件的时候,链接的本质就是要把多个不同的目标文件相互粘到一起.就想玩具积木一样整合成一个整体.为了使不同的目标文件之间能够相互粘合,这些目标文件之间必须要有固定的规则才行.比如目标文 ...

  9. 安装了包,pycharm却提示找不到包

    这段时间,我爬虫爬到了一个论坛的数据,有个分析需要知道他的字符编码,因此使用到了 chardet,我在终端很顺利的安装了这个,但是在pycharm里使用的时候老是提示有错误,向下面这样: 其实这个是因 ...

  10. JPA 多表分页查询

    业务场景:大学生毕业后统计毕业去向.学生实体和毕业去向实体一对一关系. 实体: @Entity @Data @Table(name = "t_s_student") public ...