欢迎指正

代码写的不够规范: 目的是缩短文章篇幅,实际中请注意

  阅读完本文, 你一定能判断和写出:指针函数和函数指针。

0、结论

  A、指针函数: 函数的返回值是指针类型

  B、函数指针: 函数名是一个指针

1、分析

  A、一定出现在函数。

  B、关键词: 函数和指针。

  C、 函数, 包括返回值类型、函数名、函数参数

  D、指针: 地址运算符*  和 指针变量

  E、排除函数参数。那么就剩下 函数返回值类型 和 函数名了。

  F 、函数和变量一样,也是有地址的。 函数名就是函数的地址。

  一个例子:xcode输出main函数和add函数的地址

2、形式  

  先给出形式,下面再解释。

  A、 指针函数

    声明格式:  类型说明符 *  函数名(参数);

    举例:

char* get_buf();

  

    这是一个指针函数的声明, 函数的返回类型是 char* , 函数名:get_buf, 没有参数需要传入。

  B、函数指针

    声明格式:类型说明符 (*指针变量名)(参数); 或者 typedef 类型说明符 (*指针变量名)(参数);

    举例:

typedef char (*pfunc)();

   这是一个函数指针的声明格式,返回类型为char, 函数名是一个指针,无参数需要传入。

3、解读

  方法: 解读顺序:根据声明,从左到右依次解读。关键: *与什么结合

  A、指针函数 举例: char* get_buf();

  首先, 整体判断,这是一个函数。 那我们找找函数的返回值类型,函数名,参数。

  返回值: char*

  函数名: get_buf

  参数:无

  这里,char 与 * 结合形成整体,表示的是函数的返回值类型。 不要理解错: * 不是与函数名get_buf先结合。  指针的地址运算符在前,函数名在后,连起来: 指针函数, 这是一个返回值为char*的函数,没有参数需要传入。

  

  B、函数指针, 举例: int (*pfunc)();

  首先,整体判断,这是一个函数。 找找函数的返回值类型 、函数名、参数

  返回值类型: int

  函数名:(*func)

  参数:无

  这里:*与pfunc结合,形成指针。 和平常常见的函数不一样。 比普通的函数名多了一个指针的地址解析运算符*。  将*pfunc视为整体,这个整体表示的是函数名,也就是说,用一个指针代替了原来的函数名。 函数指针: 函数名是一个指针。 函数也有地址,这里只使用一个指针指向了函数的地址。

4、一个例子

// 指针函数

int* get_result()

{

static int index = 100;

return &index;

}

// 用作举例函数指针使用

int get_id()

{

static int index = 1;

return index++;

}

// 用一个函数指针指向上面的get_id函数

typedef int (*pfunc)();

int main(int argc, const char * argv[])

{

std::cout << "1、输出指针函数结果:" << *(get_result()) << std::endl;

std::cout << "\n2、下面演示调用函数指针输出:";

pfunc pget_id_func = get_id;

std::cout << pget_id_func() << std::endl;

return 0;

}

  结果:

  

c++指针函数和函数指针概述的更多相关文章

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

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

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

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

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

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

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

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

  5. cocos2dx 3.x(获得父类的node型指针调用父类函数this->getParent())

    void CenterLayer::zhanzheng(CCObject* pSender){ ((GameScene*)this->getParent())->showLayer(Gam ...

  6. 对线程等待函数pthread_join二级指针参数分析

    分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ...

  7. C语言指针变量作为函数参数

    0x01 指针变量作为函数参数的作用是:将一个变量的地址传送到另一个函数中. 0x02 简单的例子:虽然都能实现功能,但意义不同. 正确的写法: #include <stdio.h> vo ...

  8. [Reprint]C++普通函数指针与成员函数指针实例解析

    这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下   C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...

  9. 指针数组vs数组指针 指针函数vs函数指针

    在分辨这些重要的概念时,我们先回顾一下前面所讲的C之三值合一,由于三个值所求出的地址是相同的,所以经常有传言说他们都是首元素的地址.这种说法是不正确的.为什么说它是不正确的呢? 首先定义一个指针,将三 ...

随机推荐

  1. R包开发过程记录

    目的 走一遍R包开发过程,并发布到Github上使用. 步骤 1. 创建R包框架 Rsutdio --> File--> New Project--> New Directory - ...

  2. 动态滑动登陆框-Html+Css+Js

    动态滑动登陆框 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  3. Swagger2异常 java.lang.NumberFormatException: For input string: ""

    问题在访问swagger首页时报错: java.lang.NumberFormatException: For input string: "" at java.lang.Numb ...

  4. oracle 锁查询

    --v$lock中 id1 在锁模式是 TX 时保存的是 实物id 的前2段SELECT * FROM (SELECT s.SID, TRUNC(id1 / power(2, 16)) rbs, bi ...

  5. Java RestTemplate传递参数

    最近使用Spring 的 RestTemplate 工具类请求接口的时候发现参数传递的一个坑,也就是当我们把参数封装在Map里面的时候,Map 的类型选择. 使用RestTemplate post请求 ...

  6. java多线程并发编程中的锁

    synchronized: https://www.cnblogs.com/dolphin0520/p/3923737.html Lock:https://www.cnblogs.com/dolphi ...

  7. 过滤敏感词工具类SensitiveFilter

    网上过滤敏感词工具类有的存在挺多bug,这是我自己改用的过滤敏感词工具类,目前来说没啥bug,如果有bug欢迎在评论指出 使用前缀树 Trie 实现的过滤敏感词,树节点用静态内部类表示了,都写在一个 ...

  8. 关于为了一时方便,使用@Scheduled注解定时踩的坑

    摘要: 事情是这样的前两周在做项目的时候碰到一个需求---要求每天晚上执行一个任务,公司统一使用的是 xxl-job 写定时任务的,我当时为了方便自己,然后就简单的使用了Spring的那个@Sched ...

  9. 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  10. Linux 目录结构及详细操作

    目录 Linux 目录结构及详细操作 目录结构 目录结构的特点 目录结构挂载 目录结构发展 关闭selinux(了解) 重要目录说明(etc目录说明) 1.网卡配置文件 2.解析配置文件 3.主机名称 ...