• 【带头学C++】----- 三、指针章 ---- 3.10 函数指针(补充基础知识)


    1.函数指针

    1.1 函数的返回值类型为指针类型

    将函数内部的合法地址通过返回值 返回给函数外部使用

    注意:函数不要返回普通局部变量的地址

     分析:

            在这段代码中,函数getAddr()返回一个指向局部变量data地址(作用域是函数内部)的指针,然后在test04()函数中将返回的指针赋值p。然而,这样做会导致段错误

           原因在于getAddr()函数返回指向data的指针,而data是一个局部变量,当getAddr()函数执行完毕后,data将被销毁,这意味着p将指向一个已经释放的内存地址。这种情况称为悬垂指针(dangling pointer)

    解决:使用static修饰静态变量,不让其被释放

          特别的:不同编译器有自己优化策略,我使用的QtCreator会出现这样的错误,有人使用VS或者Dev时候这时候编译器会自动优化这个段错误。

    1.2  函数指针的定义

    1.形式

          函数指针的基本定义形式为:

        return_type (*ptr_name)(parameter_list) 

    注:前面()括号不能去掉,去掉就是普通函数的定义形式了

    其中return_type是函数返回类型(int、char等等),ptr_name是指针变量的名字,parameter_list是函数的参数列表。

    例如,对于一个返回int类型并且不接受任何参数的函数指针的定义可以如下所示:

    int (*ptr)();
    

    函数名 代表函数的入口地址
    函数指针:本质是一个指针变量 只是该变量保存的是函数的入口地址

    //函数指针 p只能保存 有两int形参以及int返回值 的函数入口地址

    int (*p)(int,int) = NULL;

     

    2.函数指针变量注意

    函数指针变量,不要+1   无意义(加1跳过一个函数?没有意义)

    禁止对函数指针变量取*  无意义(存在在代码区,我们使用函数指针是为了调用函数的)

     int (*p)(int,int) = my_add;

    *p会被编译器优化成p

    函数指针变量 判断大小 > < 无意义

    函数指针变量 可以赋值 p2=p1、

    函数指针变量 可以判断相等 p2 == p1

    3.使用typedef给变量取别名

     

     2.为什么要使用函数指针

        1.函数指针作为函数的参数

    目的:为了让函数算法产生多样化

     案例:设计一个计算加减乘除的算法,使用函数指针作为函数的参数

     

     

  • 相关阅读:
    前端性能优化手段
    Spring Cloud根据服务名获取服务的ip端口
    Python 实现自动化测试 dubbo 协议接口
    查看/清除Windows系统SID
    MySQL【子查询】
    Linux tips: shell中启动多进程并行批处理的技巧
    XML配置文件
    ReferenceError: primordials is not defined错误解决
    Redis的五种数据类型详解
    6 个超级良心的开源教程!
  • 原文地址:https://blog.csdn.net/Phofomy/article/details/134331063