一 函数指针

1 函数类型

函数的类型由它的返回值类型,和形参类型共通过决定,与函数名无关。

eg:bool lengthcompare(const string&, const string&);

该函数的类型是bool (const string&, const string&)

2 函数指针声明

声明一个上述类型的指针pf

bool (*pf)(const string&, const string&)

3 使用函数指针

(1)把函数名作为一个值使用时,该函数自动转换成指针.

pf = lengthcompare;

pf = &lengthcompare;  // 跟上面的语句是等价的,&是可选的

(2)调用指针指向的函数

bool b1 = pf("aaa","bbb");

bool b2 = pf("aaa","bbb");       //等价调用

bool b3 = lengthcompare("aaa","bbb");   //另一个等价调用

4 重载的函数指针

编译器通过指针类型决定选用哪个函数,指针类型必须与重载函数中的某一个精确匹配

void ff(int*);// 第一个函数

void ff(unsigned int);// 第二个函数

void (*pf)(unsigned int) = ff;//pf指向的是第二个函数

5 函数指针的形参

函数的形参不能是函数类型,但可以是函数指针类型

void useBigger(int aa,bool pf (const string&, const string&)); // 第三个形参会自动转换为指针

void useBigger(int aa,bool (*pf) (const string&, const string&)); // 等价声明

6 返回指向函数的指针

函数的返回值不能是函数,但可以是函数的指针,返回类型必须显式声明为指针类型

eg:int(*f1(int))(int*,int);

函数f1(int )返回类型为int(*)(int*,int)的指针

typedef与using(using是c++11开始支持的用法)

typedef int INTT;----> using INTT = int;

typedef int* PINTT;----> using PINTT = int*;

typedef bool Func(int ,int);----> using Func = bool (int,int); // Func是一个函数类型

typedef bool (*FuncP)(int ,int);----> using FuncP = bool (*)(int,int); // FuncP是一个函数指针类型

函数指针_typedef的更多相关文章

  1. C++虚函数和函数指针一起使用

    C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...

  2. 为什么 C++ 中成员函数指针是 16 字节?

    当我们讨论指针时,通常假设它是一种可以用 void * 指针来表示的东西,在 x86_64 平台下是 8 个字节大小.例如,下面是来自 维基百科中关于 x86_64 的文章 的摘录: Pushes a ...

  3. C++函数指针总结

    学习c++的过程中,指针是难点,熟悉了指针之后,还有一个让人很蛋疼的难点,那就是函数指针了.本博文详细介绍一下常见的各种坑爹的函数指针. 至于指针的详细学习,推荐这篇博文C++指针详解 与数据一样,函 ...

  4. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

  5. 结构体内嵌函数指针实现C语言面向对象

    结构体内嵌函数指针 #include<stdio.h> void say(int age) { printf("我%d岁了\n",age); } struct stud ...

  6. 用typedef定义函数指针的问题

    在学习windows API的时候,遇到下面这段代码   以前见过的typedef的用法都是给一个数据类型取一个别名 typedef oldTypeName newTypeName   这种给数据类型 ...

  7. 你必须知道的指针基础-7.void指针与函数指针

    一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针” ...

  8. objective-c中的@selector()和 c /c++的函数指针

    先看tomcat里用到的代码: //然后开始动画 //把图片放到animationImages,接受数组参数 self.tom.animationImages = arrayImage; //设置时间 ...

  9. C++基础——函数指针 函数指针数组

    ==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...

随机推荐

  1. OpenGL阴影,Shadow Volumes(附源程序,使用 VCGlib )

    实验平台:Win7,VS2010 先上结果截图:    本文是我前一篇博客:OpenGL阴影,Shadow Mapping(附源程序)的下篇,描述两个最常用的阴影技术中的第二个,Shadow Volu ...

  2. Chp11 11.7

    <Java语言程序设计>P327 题目要求使用数组来模拟实现ArrayList的一些方法,并要求可以根据实际长度来实现数组自动增长,这里只贴出LikeArrayList.java 测试方法 ...

  3. hping原理、安装、使用详解介绍

    [原理基础]  Hping是一个命令行下使用的TCP/IP数据包组装/分析工具,其命令模式很像Unix下的ping命令,但是它不是只能发送ICMP回应请求,它还可以支持TCP.UDP.ICMP和RAW ...

  4. C#连接数据库SQL,并转换成list形式

    web config 配置 <connectionStrings>    <add name="SQLConnString" connectionString=& ...

  5. bootstrap-15

    缩略图:缩略图在网站中最常用的地方就是产品列表页面,一行显示几张图片,有的在图片底下(左侧或者右侧)带有标题.描述信息.Bootstrap框架将这一部独立成一个模块组件,并通过thumbnail样式配 ...

  6. include/asm/dma.h

    /* $Id: dma.h,v 1.7 1992/12/14 00:29:34 root Exp root $ * linux/include/asm/dma.h: Defines for using ...

  7. 《C专家编程》第二章——这不是Bug,而是语言特性

    无论一门语言有多么流行或多么优秀,它总是存在一些问题,C语言也不例外.本章讨论的重点是C语言本身存在的问题,作者煞费苦心的用一个太空任务和软件的故事开头,也用另一个太空任务和软件的故事结尾,引人入胜. ...

  8. android-APP-bluetooth

    1.创建工程项目 2.工程界面(教程3) 如下目录所示:src目录下MainActivity.java是程序:res下面都是图标等资源文件,layout下的activity_main.xml是按钮等界 ...

  9. 学习css中得与惑

    css的学习分享 所学的css知识看多,会看懂.这只是在实践中发现的问题:  一. ???h1比div还大  h1上下有边距   为什么浮动不了  (现不知道) 二. css写了 表现不出来.... ...

  10. Ogre中OIS的输入的使用

    OIS的使用有两种模式:缓冲模式和非缓冲模式.非缓冲方式能处理鼠标或键盘长按的事件,实时性强缓冲方式则不能长按事件,用于非实时响应. 非缓冲输入:1.创建方式:其中 false 参数代表使用非缓冲模式 ...