直接上代码:

#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. Pentaho 免费版本下载地址列表

    Pentaho CE(Community Edition) 免费版本下载地址列表 http://sourceforge.net/projects/pentaho/files/Pentaho 插件名称  ...

  2. 机器学习12—FP-growth学习笔记

    test12.py #-*- coding:utf-8 import sys sys.path.append("fpGrowth.py") import fpGrowth from ...

  3. Eval,Bind,<% %>,<%# %>和<%= %> 笔记

    1.<% %>用来绑定后台代码 如: < % for(int i=0;i<100;i++) { Reaponse.Write(i.ToString()); } %> 2. ...

  4. member access within misaligned address 0x000000000031 for type 'struct ListNode', which requires 8 byte alignment

    在做LeetCode的two sum题目的时候,提交代码遇到了如题的runtime error,后来在一篇博客上看到了解决方法. 现有如下结构体: struct ListNode { int val; ...

  5. jenkins和gitlab版本

  6. CAShapeLayer实现圆形进度条效果

    一.CAShapeLayer简单介绍: .CAShapeLayer继承至CALayer,能够使用CALayer的全部属性值 2.CAShapeLayer须要与贝塞尔曲线配合使用才有意义 3.使用CAS ...

  7. Office Web Apps Server 2013与PDF(二)

    在上一篇文章(Office Web Apps Server 2013与PDF(一))中,曾经介绍了Office Web Apps Server 2013在更新后,可以直接对PDF文档进行在线的查看.不 ...

  8. WCF基础之承载服务和生成客户端

    wcf的承载有三种iis.was和自承载,它们如何承载园子里有很多,就不多赘述. 自iis7以后iis支持http和非http的协议,使用iis承载服务与其他两种承载相比,我觉的最明显的是was和自承 ...

  9. XmlDocument.selectNodes() and selectSingleNode()的xpath的学习资料

    Xpath网页: http://www.w3school.com.cn/xpath/xpath_syntax.asp XDocument.parse(string)类似于XmlDocument.loa ...

  10. Java语言实现简单FTP软件------>辅助功能模块FTP站点管理的实现(十二)

    1.FTP站点管理 点击"FTP站点管理"按钮,弹出对话框"FTP站点管理",如下图 1) 连接站点 在FTP站点管理面板上选好要连接的站点,点击"连 ...