c++指针函数和函数指针概述

欢迎指正

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

 

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

0、结论

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

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

 

1、分析

  A、一定出现在函数。

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

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

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

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

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

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

c++指针函数和函数指针概述

 

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++指针函数和函数指针概述

 

原文链接: https://www.cnblogs.com/pandamohist/p/13513974.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++指针函数和函数指针概述

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/201632

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午8:50
下一篇 2023年2月12日 下午8:51

相关推荐