/*ca71a_c++_指向函数的指针_通过指针调用函数
用typedef简化函数指针的定义
简化前:
bool(*pf)(const string&, const string &);
bool(*pf2)(const string&, const string &);
bool(*pf3)(const string&, const string &);

简化后:
typedef bool(*cmpFcn)(const string &, const string &);
//具体应用参考main函数内部代码
comFcn pf;
comFcn pf2;
comFcn pf3;
指向函数的指针的初始化和赋值
通过指针调用函数
函数指针形参
返回指向函数的指针

//ff是一个函数,有一个形参x,返回的结果是一个函数指针int(*)(int *,int),
int(*ff(int x))(int *, int)

{
cout << x << endl;
return demo;
}
调用时,首先执行ff(int x),然后返回*int的指针,然后指向demo,然后把demo(int *, int)传递给demo函数的定义
int demo(int *p, int a)
{
return 8;
}
使用typedef简化,一遍更好的理解:
typedef int (*PF)(int *, int);

PF ff(int x)
{
cout << x << endl;
return demo;//指针指向demo,调用demo函数
}

//pf是一个指针,指向函数的指针:函数类型
bool(*pf)(const string&, const string &);
//
//bool *pf(const string&, const string &);
*pf如果没有括号,pf就是一个函数了,它的返回值是指向bool的一个指针

返回类型不一样,或者形参不一样,也不可以指向

指向重载函数的指针:

//void(*pff)(int) = &ff;//需要精确匹配
void (*pfg)(vector<double>) = &ff;
//double(*pfg1)(vector<double>) = &ff;//错误,类型不匹配
void(*pfg2)(unsigned int) = &ff;

*/

 /*ca71a_c++_指向函数的指针_通过指针调用函数
用typedef简化函数指针的定义
简化前:
bool(*pf)(const string&, const string &);
bool(*pf2)(const string&, const string &);
bool(*pf3)(const string&, const string &); 简化后:
typedef bool(*cmpFcn)(const string &, const string &);
//具体应用参考main函数内部代码
comFcn pf;
comFcn pf2;
comFcn pf3;
指向函数的指针的初始化和赋值
通过指针调用函数
函数指针形参
返回指向函数的指针 //ff是一个函数,有一个形参x,返回的结果是一个函数指针int(*)(int *,int),
int(*ff(int x))(int *, int) {
cout << x << endl;
return demo;
}
调用时,首先执行ff(int x),然后返回*int的指针,然后指向demo,然后把demo(int *, int)传递给demo函数的定义
int demo(int *p, int a)
{
return 8;
}
使用typedef简化,一遍更好的理解:
typedef int (*PF)(int *, int); PF ff(int x)
{
cout << x << endl;
return demo;//指针指向demo,调用demo函数
} //pf是一个指针,指向函数的指针:函数类型
bool(*pf)(const string&, const string &);
//
//bool *pf(const string&, const string &);
*pf如果没有括号,pf就是一个函数了,它的返回值是指向bool的一个指针 返回类型不一样,或者形参不一样,也不可以指向 指向重载函数的指针: //void(*pff)(int) = &ff;//需要精确匹配
void (*pfg)(vector<double>) = &ff;
//double(*pfg1)(vector<double>) = &ff;//错误,类型不匹配
void(*pfg2)(unsigned int) = &ff; */ #include <iostream>
#include <string>
#include <vector>
using namespace std; //函数定义简化操作
typedef bool(*cmpFcn)(const string &, const string &);
typedef int (*PF)(int *,int); bool lengthCompare(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 cstringCompare(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)
{
cout << "执行demo()" << endl;
return ;
}
//ff是一个函数,有一个形参x,返回的结果是一个函数指针int(*)(int *,int),
//int(*ff(int x))(int *, int)//这句也可以
PF ff(int x)//经过typedef简化后:
{
cout << "执行ff(int x)" << endl;
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()
{
int a = ;
int *pa;
//pf是一个指针,指向函数的指针:函数类型
bool(*pf)(const string&, const string &);//pf是一个局部变量
bool(*pf2)(const string&, const string &);
bool(*pf3)(const string&, const string &);
pf = &lengthCompare;//也可以写成:pf=lengthCompare; pa = &a;//普通指针
cout << lengthCompare("hello", "pointer") << endl;
cout << lengthCompare("hello", "point") << endl;
cout << (*pf)("hello", "point") << endl;//函数指针
//也可以写成这样:*号省掉
cout << pf("hello", "point") << endl;//函数指针 cout << *pa << endl; //bool(*pf)(const string&, const string &);被简化为如下:
cmpFcn pfa;
cmpFcn pf2a = ;//指向函数的指针的初始化
cmpFcn pf3a = ;
pf3 = pf2a;//指向函数的指针的赋值
//然后调用方法一样:
pfa = &lengthCompare; //指向函数的指针的赋值
pf2 = lengthCompare;
//pf3 = sumlength; //指针指向的返回值需要一致。不能bool指向 size_type.
cout << (*pfa)("hello", "point") << endl;//函数指针
cout << pf2("bb","cc") << endl;//也可以写成这样:*号省掉 cmpFcn pf4 = lengthCompare;
useBigger("hi","function",pf4);
cout << ff()(&a,a) << endl; //指向重载函数的指针: //void(*pff)(int) = &ff;//需要精确匹配
void (*pfg)(vector<double>) = &ff;
//double(*pfg1)(vector<double>) = &ff;//错误,类型不匹配
void(*pfg2)(unsigned int) = &ff;
return ;
}

ca71a_c++_指向函数的指针_通过指针调用函数txwtech的更多相关文章

  1. 指针的指针&指向指针数组的指针

    一.指针的指针    指针的指针看上去有些令人费解.它们的声明有两个星号.例如:        char ** cp;    如果有三个星号,那就是指针的指针的指针,四个星号就是指针的指针的指针的指针 ...

  2. Python笔记:调用函数,带扩号和和不带括号的区别

    调用函数,如果带括号,那么是调用函数运行后的结果, 调用函数不带括号,调用的是函数本身 例如: def cun (a,b): return a+b print(cun) : 调用函数,打印的是函数 p ...

  3. python 定义函数 调用函数

    创建test.py文件 #coding=utf-8 #定义函数 def hello(): print "hello world" #调用函数 hello() 在cmd下面运行

  4. Python:函数的命名空间、作用域与闭合函数

    1,参数陷阱 如果默认参数的只是一个可变数据类型,那么每一次调用的时候,如果不传值就共用这个数据类型的资源. 2,三元运算 c=a if a>b else b#如果a>b返回a,否则,返回 ...

  5. js笔记(4)--关于在window.onload()里面定义函数,调用函数无法执行~

    由于本人学习js学不久,所以,今天刚好遇到了一个关于在window.onload里面定义函数,然后在html里面调用函数时出现错误.具体见下面: <!DOCTYPE html> <h ...

  6. python之函数名称空间,作用域,嵌套函数

    目录 嵌套函数 定义 名称空间的三大类(只存变量名) 名称空间加载顺序 变量名的查找顺序为 作用域 嵌套函数 定义 函数内部定义的函数,无法在函数外部使用内部定义的函数. def f1(): def ...

  7. C++第四篇--重载_指针_引用

    C++第四篇--重载_指针_引用 1. 基础知识 重载:函数名相同,根据参数不同(类型.数量.顺序不同)调用同名函数 指针和引用:引用就是别名,引用时必须初始化,引用你定义的变量. int a; in ...

  8. c++指向指针的指针与 c++指针作为函数参数传递问题

    一直搞不明白,c++中指针到底是个啥东西,今天遇到到c++,指向指针的指针的问题,突然有点开窍了. 举个例子: int main(int argc, char** argv){ int a[5]={1 ...

  9. 零基础逆向工程24_C++_01_类_this指针_继承本质_多层继承

    1 类内的成员函数和普通函数的对比 1.1 主要是从参数传递.压栈顺序.堆栈平衡来总结. 1.参数传递:成员函数多传一个this指针 2.压栈顺序:成员函数会将this指针压栈,在函数调用取出 3.堆 ...

随机推荐

  1. Docker 入门:镜像

    主要内容: 什么是镜像 下载镜像 pull 设置下载加速源 查看镜像 上传镜像 push 什么是镜像(image) 镜像是一个文件系统,提供了容器运行时需要用到的文件和参数配置.相当于平时在使用某个软 ...

  2. RabbitMQ--其他几种模式

    本文是作者原创,版权归作者所有.若要转载,请注明出处. 本文RabbitMQ版本为rabbitmq-server-3.7.17,erlang为erlang-22.0.7.请各位去官网查看版本匹配和下载 ...

  3. [apue] 一个工业级、跨平台的 tcp 网络服务框架:gevent

    作为公司的公共产品,经常有这样的需求:就是新建一个本地服务,产品线作为客户端通过 tcp 接入本地服务,来获取想要的业务能力. 与印象中动辄处理成千上万连接的 tcp 网络服务不同,这个本地服务是跑在 ...

  4. Rocket - devices - TLDeadlock

    https://mp.weixin.qq.com/s/Zv4HE7zMBzHbsWGg3pa9fg 简单介绍TLDeadlock的实现. 1. TLDeadlock TLDeadlock是抽象类Dev ...

  5. (Java实现) 洛谷 P1051 谁拿了最多奖学金

    题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上 ...

  6. Java实现 蓝桥杯 算法训练 Number Challenge(暴力)

    试题 算法训练 Number Challenge 资源限制 时间限制:3.0s 内存限制:512.0MB 问题描述 定义d(n)为n的约数个数.现在,你有三个数a,b,c.你的任务是计算下面式子mod ...

  7. Java实现 LeetCode 126 单词接龙 II

    126. 单词接龙 II 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列.转换需遵循如下规则: ...

  8. Java实现 洛谷 P1508 Likecloud-吃、吃、吃

    import java.util.Arrays; import java.util.Scanner; public class Main { static int n, m; static int[] ...

  9. java实现第六届蓝桥杯五星填数

    五星填数 如[图1.png]的五星图案节点填上数字:1~12,除去7和11. 要求每条直线上数字和相等. 如图就是恰当的填法. 请你利用计算机搜索所有可能的填法有多少种. 注意:旋转或镜像后相同的算同 ...

  10. java实现第六届蓝桥杯灾后重建

    灾后重建 题目描述 Pear市一共有N(<=50000)个居民点,居民点之间有M(<=200000)条双向道路相连.这些居民点两两之间都可以通过双向道路到达.这种情况一直持续到最近,一次严 ...