C语言复习之结构体指针 ; 函数指针

结构体指针

不可以这样定义:
在这里插入图片描述
应该这样定义:加上指针,因为指针是4个字节,这样的话,他的大小就确定下来了。
在这里插入图片描述
在这里插入图片描述
一个是表示结构体,一个是表示结构体的指针。
在这里插入图片描述
很容易理解,脑子里要有内存图。
结构体也可定义为结构体数组: (结构体是我创建出来的数据类型 当然可以有数组)
在这里插入图片描述

函数指针

结构体中怎么放入函数中去?
在这里插入图片描述
怎么定义函数指针?
Int add ( int a , int b);
在这里插入图片描述
首先他是一个指针,那么在内存中必然有一块空间保存它。
在这里插入图片描述
在这里插入图片描述
这里仅仅针对函数可以有函数变量名 或者 ( &函数变量名)
结构体中调用函数指针。
在这里插入图片描述
改进程序:

Void draw_logo_lcda ( void) 
{
}
Void draw_logo_lcdb ( void) 
{
}
Typedef Struct  lcd_operation {Int type  ;Void  (* draw_logo_lcd) (void) 
}lcd_operation, *p_lcd_operation ;//架构体有数组    公司有两款LCD
Lcd_operation  xxx_com_lcds[] = {{ 0 ,   draw_logo_lcda} ,{ 1 ,   draw_logo_lcda} ,
};
Int  get_lcd_type(void)
{ }
p_lcd_operation  get_lcd (void) 
{Int type = get_lcd_type ();   //根据类型是什么  直接调用给类型实现的函数指针}
Int  main {Int type = get_lcd_type ();   //根据类型是什么  直接调用给类型实现的函数指针Xxx_com_lcds[type].draw_logo() ;   //调用结构体中 数组一类型的  的某一函数   } 

另一种实现:

Void draw_logo_lcda ( void) 
{
}
Void draw_logo_lcdb ( void) 
{
}
Typedef Struct  lcd_operation {
Int type  ;
Void  (* draw_logo_lcd) (void) 
}lcd_operation, *p_lcd_operation ;//架构体有数组    公司有两款LCD
Lcd_operation  xxx_com_lcds[] = {
{ 0 ,   draw_logo_lcda} ,
{ 1 ,   draw_logo_lcda} ,
};
Int  get_lcd_type(void)
{ }
//根据硬件的类型  直接返回一个结构体指针
p_lcd_operation  get_lcd (void)    //返回的直接是结构体指针 也就是return要加上地址
{Int  type = get_lcd_type ();   //根据类型是什么  直接调用给类型实现的函数指针   以后硬件类型变化了   只需要修改get_lcd_type (); Return   & Xxx_com_lcds[type] ;  //返回地址  只需要返回4字节的数据  返回结构体 会很多空间
}
Int  main {//  Int type = get_lcd_type ();   //根据类型是什么  直接调用给类型实现的函数指针//   Xxx_com_lcds[type].draw_logo() ;   //调用结构体中 数组一类型的  的某一函数   p_lcd_operation lcd ;Lcd = get_lcd ()  ;   //指针Lcd -> draw_logo() ;   } 

在这里插入图片描述

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

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

相关文章

挑战52天学小猪佩奇笔记--day24

52天学完小猪佩奇--day24 ​【本文说明】 本文内容来源于对B站UP 脑洞部长 的系列视频 挑战52天背完小猪佩奇----day24 的视频内容总结,方便复习。强烈建议大家去关注一波UP,配合UP视频学习。 注:这集开始变成一段一段的猜台词,加…

VR虚拟现实的七大应用领域

一、工业领域 园区利用虚拟现实技术优化生产管理与节能减排,实现提质增效降本。发展支持多人协作和模拟仿真的虚拟现实开放式服务平台,打通产品设计与制造环节,构建虚实融合的远程运维新型解决方案,适配各类先进制造技术的员工技…

UDP分片与丢包,UDP真的比TCP高效吗?

一、UDP 报文格式 每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2 字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。 UDP 报文格式如图所示。 UDP 报文中每个字段的含义如下: 源端…

Pytest自动化测试用例中的断言详解

前言 测试的主要工作目标就是验证实际结果与预期结果是否一致;在接口自动化测试中,通过断言来实现这一目标。Pytest中断言是通过assert语句实现的(pytest对Python原生的assert语句进行了优化),确定实际情况是否与预期一…

通过“待办事项列表项目”快速学习Pyqt5的一些特性

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图(Item View) 快速弄懂Pyqt5的4种项目部件(Item Widget) 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

Apache Flume(3):数据持久化

1 使用组件 File Channel 2 属性设置 属性名默认值说明type-filecheckpointDir~/.flume/file-channel/checkpoint检查点文件存放路径dataDirs~/.flume/file-channel/data日志存储路径,多个路径使用逗号分隔. 使用不同的磁盘上的多个路径能提高file channel的性能 …

SpringIOC之@Primary

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

nodejs微信小程序+python+PHP技术下的音乐推送系统-计算机毕业设计推荐

音乐推送系统采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,  本文设计了一款音乐推送系统,系统为人…

vue中2种取值的方式

1.url是这种方式的:http://localhost:3000/user/1 取得参数的方式为:this.$route.params.id 2.url为get方式用?拼接参数的:http://localhost:3000/user?phone131121123&companyId2ahttp://localhost:3000/ 取得参数值的方式…

freeRTOS使用

创建第一个FreeRTOS程序 1、官网源码下载 (1)进入FreeRTOS官网FreeRTOS professional services for application and RTOS development and consulting. FreeRTOS is an Open Source Code RTOS (2)点击下载FreeRTOS 2、处理目录 &…

基于多智能体系统一致性算法的电力系统分布式经济调度策略MATLAB程序

微❤关注“电气仔推送”获得资料(专享优惠) 参考文献: 主要内容: 应用多智能体系统中的一致性算法,以发电机组的增量成本和柔性负荷的增量效益作为一致性变量,设计一种用于电力系统经济调度的算法&#x…

openwrt中taiscale自动安装脚本详解

openwrt中taiscale自动安装脚本详解 一、代码仓库地址 https://github.com/adyanth/openwrt-tailscale-enabler 二、代码仓库中脚本文件详解 主要包含三个脚本分别是etc/init.d/tailscale、usr/bin/tailscale、usr/bin/tailscaled ,接下来逐个分析一下脚本中的具…

3.1【窗口】窗口简介与窗口组

一,窗口简介 Windows用于显示内容,并将不同生成的内容组合在一起。每个不同的呈现器都可以在同一个进程中,也可以在另一个或多个进程中。 Screen中的窗口概念与你在传统窗口系统中可能习惯的略有不同。在Screen中,当内容来自不同来源时,应用程序被分成几个窗口,当应用程…

Linux查看进程PID以及杀掉进程的方法

目录 参考链接 前言 查看进程PID PS命令 ps -le命令 查找父进程 杀死进程 参考链接 【Linux 】 ps命令详解,查看进程pid_linux查看pid 对应的程序-CSDN博客 Linux查看进程PID的方法(linux查进程的pid)附带自动kill 掉_linux查看pid 对…

DDA 算法

CAD 算法是计算机辅助设计的算法,几何算法是解决几何问题的算法 CAD 算法是指在计算机辅助设计软件中使用的算法,用于实现各种设计和绘图功能,CAD 广泛应用于建筑、机械、电子等领域,可以大大提高设计效率和精度 绘图算法是 CAD…

机器学习算法---聚类

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

大数据机器学习与深度学习——过拟合、欠拟合及机器学习算法分类

大数据机器学习与深度学习——过拟合、欠拟合及机器学习算法分类 过拟合,欠拟合 针对模型的拟合,这里引入两个概念:过拟合,欠拟合。 过拟合:在机器学习任务中,我们通常将数据集分为两部分:训…

03进程基础-学习笔记

Process 进程 进程为操作系统的基本调度单位,占用系统资源(cpu,内存)完成特定任务,所有说进程是操作系统的标准执行单元 进程与程序的差别 程序是静态资源,存储与电脑磁盘中(disk磁盘资源)程序执行后会创建进程,负责完成功能&a…

Python-flask 入门代码

python与pycharm安装 过程略,网上很多,记得为pycharm配置默认解释器 虚拟环境 pipenv # 全局安装虚拟环境 # 可加-U参数,明确全局安装,不加好像也可以? pip3 install pipenv #检查安装情况 pipenv --version # ---控制台输出…

机械硬盘和固态硬盘速度测试

利用ubuntu自带的disk磁盘管理软件对手头的三个硬盘做压力测试,disk软件挺好用的,再也不用命令了。 第一个是致态的1T固态硬盘,速度1.8GB/S。 ST机械硬盘,速度只有300多MB/S. 三星固态硬盘,速度1.4GB/s。