【带头学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.函数指针作为函数的参数

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

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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/169904.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【服务配置文件详解】补充rsyslog服务的配置文件翻译解读

学习rsyslog日志管理服务的配置文件 # rsyslog configuration file 关于rsyslog软件的配置文件# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html 想看到更多相关信息&#xff0c;可以去查看这个文件&#xff0c;rsyslog-*的*表示软件版本&#xff0c;我…

Golang 字符串处理汇总

1. 统计字符串长度&#xff1a;len(str) len(str) 函数用于统计字符串的长度&#xff0c;按字节进行统计&#xff0c;且该函数属于内置函数也不用导包&#xff0c;直接用就行&#xff0c;示例如下&#xff1a; //统计字符串的长度,按字节进行统计: str : "golang你好&qu…

一文读懂微前端

1 语雀文档 https://www.yuque.com/chanwj/vlkwxk/qvpv3kqws5hno3qt?singleDoc# 《微前端》本文使用的参考文档均以链接方式粘贴于文章内&#xff0c;十分感谢~ 2 项目github链接 如果你觉得本文档对你有用&#xff0c;恳请github仓库给个star~https://github.com/OmegaCh…

Unity 使用INI文件存储数据或配置参数预设

法1&#xff1a;调用外部Capi库 具体使用&#xff1a; public class Ini{//读取INI文件需要调用C的APP[System.Runtime.InteropServices.DllImport("kernel32")]private static extern long WritePrivateProfileString(string section, string key, string val, st…

ELK之Logstash解析时间相差8h的问题

一、问题描述 服务器当前时间为&#xff1a;2022年 06月 28日 星期二 11:24:22 CST 而logstash解析的时间为2022-06-28T03:15:25.545Z与实际时间相差8h 一、解决办法&#xff1a; 需改logstash的配置文件&#xff1a; 原理就是&#xff1a;定义一个中间变量timestamp&…

虚幻5.3打包Windows失败

缺失UnrealGame二进制文件。 必须使用集成开发环境编译该UE项目。或者借助虚幻编译工具使用命令行命令进行编译 解决办法&#xff1a; 1.依次点击平台-项目启动程序 2.点击后面的按钮进行设置 3.稍等后&#xff0c;打包后的程序即可运行&#xff0c;之后就可以愉快的打包了

Tektronix(泰克)示波器TBS1102B测试电压

对于 Tektronix TBS1102B 示波器来说&#xff0c;测试电压的步骤基本如下&#xff1a; 连接测量点&#xff1a; 将被测电路的测量点连接到示波器的输入通道。使用正确的探头并确保连接的极性正确。 选择通道&#xff1a; 选择示波器上的通道&#xff0c;你想要测量的电压可能连…

linux_day02

1、链接&#xff1a;LN 一个点表示当前工作目录&#xff0c;两个点表示上一层工作目录&#xff1b; 目录的本质&#xff1a;文件&#xff08;该文件储存目录项&#xff0c;以链表的形式链接&#xff0c;每个结点都是目录项&#xff0c;创建文件相当于把目录项添加到链表中&…

vColorPicker与vue3-colorPicker——基于 Vue 的颜色选择器插件

文章目录 前言样例特点 一、使用步骤&#xff1f;1. 安装2.引入3.在项目中使用 vcolorpicker 二、选项三、事件四、问题反馈问题所在安装引入例子效果图 前言 vColorPicker——官网 vColorPicker——GitHub 样例 vColorPicker是基于 Vue 的一款颜色选择器插件&#xff0c;仿照…

路径总和[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你二叉树的根节点root和一个表示目标和的整数targetSum。判断该树中是否存在 根节点到叶子节点的路径&#xff0c;这条路径上所有节点值相加等于目标和targetSum。如果存在&#xff0c;返回true&#xff1b;否则&#xff0c;返回fa…

竞赛选题 深度学习疲劳检测 驾驶行为检测 - python opencv cnn

文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习加…

Vue3全局共享数据

目录 1&#xff0c;Vuex2&#xff0c;provide & inject2&#xff0c;global state4&#xff0c;Pinia5&#xff0c;对比 1&#xff0c;Vuex vue2 的官方状态管理器&#xff0c;vue3 也是可以用的&#xff0c;需要使用 4.x 版本。 相对于 vuex3.x&#xff0c;有两个重要变…