当前位置: 首页 > news >正文

函数指针学习

认识函数指针:

函数指针的用处:

回调函数(以函数指针为参数的参数)

定义带标签的结构体

typedef struct mode {

int data;

} Node;

  • 标签(mode: mode 是结构体的标签名。在这种定义中,mode 是结构体类型的名称,但 Node 是通过 typedef 创建的别名。

  • 好处:

    • 标签的存在: 标签 mode 使得你可以在结构体类型的定义中引用自身(对于自引用结构体类型)。如果结构体内部有指向自身的指针时(如链表中的 next 指针),标签是必要的。
    • 自引用: 如果你需要在结构体中使用指向相同类型的指针(例如链表中的 next 和 pre),标签是必须的。

定义不带标签的结构体

 

typedef struct {

int data;// 不能在此处使用指向自身的指针,因为没有标签

} Node;

  • 无标签: 结构体没有指定标签名。在这种情况下,结构体只能通过 Node 类型进行引用。

  • 好处:

    • 简洁: 如果结构体类型不需要在其他地方引用(例如,内部定义结构体),或者结构体类型是临时的且只用于 typedef 生成别名时,可以省略标签。
    • 局部性: 当你不需要在结构体定义中引用自身时(例如,没有自引用的情况),不使用标签可以使定义更加简洁。

总结和应用场景

  1. 带标签的结构体:

    • 当结构体类型需要引用自身时,例如在链表、树等数据结构中。
    • 当你希望结构体在其他地方有额外的引用能力。
  2. 不带标签的结构体:

    • 当结构体类型仅用于定义和别名创建,且不需要自引用或外部引用时。
    • 当定义的结构体非常简单,仅用于某个特定的、局部的目的。

typedef用法:

例子:

关于typedef的别名定义

1、

2、

万能指针充当函数指针:

万能指针:空类型的指针void*p

万能指针能操作如何类型的指针,在使用前要做强制类型转换

指针的两个类型:1、指针的类型(变量的类型): (取代掉变量名就行了)

                             2、指针所指向的类型 指针要操作的数据:  (去掉变量名和*)

例:

const的使用:

1、*前的const写前写后没区别

所以 const  int x=1;和int const x=1;是等效的

作用是修饰数据类型,它是修饰指针所指向的数据的类型

所以const  int *x的 *x不能变

2、int const* x修饰的是指针变量,不能修改指针变量的指向(相当于x不能变)

就这两种情况,上述的四个示例都可以由这两种组合

数组指针和指针数组:

哪个在后面,他就是什么

整形数组:------->数组       拥有多个变量名有规律的整形变量

数组指针:------->指针                                                            :一般是用来操作二维或者多维数组

指针数组:------->数组       拥有多个指针名有规律的指针变量 组的  :一般是用来表示字符串的

函数指针的应用:

用作

[0基础必看][函数指针妙用]原来同学们并不知道我们的驱动接口怎么用_哔哩哔哩_bilibili

屏幕驱动里用结构体存储iic的函数指针,在屏幕驱动里只调用结构体里的函数,至此屏幕驱动与iic解耦,iic的绑定从编译阶段推迟到了运行阶段

相关文章:

函数指针学习

认识函数指针: 函数指针的用处: 回调函数(以函数指针为参数的参数) 定义带标签的结构体 typedef struct mode { int data; } Node; 标签(mode): mode 是结构体的标签名。在这种定义中,mo…...

『功能项目』武器的切换实例【34】

本章项目成果展示 我们打开上一篇33战士的A键连击的项目, 本章要做的事情是按键盘E键切换职业时切换手中的武器 首先在资源商店下载免费的武器模型 创建一个空物体 命名为WeaponPos 将武器预制体拖拽至WeaponPos (注意调整空物体位置就可以后续文章会更…...

github中action作用和讲解

1,简介 GitHub Actions 是 GitHub 的一个自动化功能,它允许你在 GitHub 仓库中自动执行软件开发工作流程。你可以使用 GitHub Actions 来执行各种任务,比如: 自动测试:每当代码被推送到仓库时,自动运行测试…...

数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)

数据库管理238期 2024-09-04 数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)1 架构图2 分片数据库与分片3 Shard Catalog4 Shard Director5 Global Service6 管理界面总结 数据库管理-第238期 23ai:全球分布式数…...

GIT | git提交注释自动添加信息头

GIT | git提交注释自动添加信息头 时间:2024年9月6日10:20:11 文章目录 GIT | git提交注释自动添加信息头1.操作2.commit-msg文件 1.操作 2.commit-msg文件 #!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit&q…...

React 全屏问题解决方案

1、全屏下弹窗被遮挡的问题 参考:https://www.jianshu.com/p/b22d1ad9533e 原因: 需要全屏的节点部分被传入 screenfull 中,弹窗的层级永远低于全屏,所以被遮挡。 解决方法: 方式1:把整个 body 全屏&…...

Java JVM 垃圾回收算法详解

Java 虚拟机(JVM)是运行 Java 应用程序的核心,它的垃圾回收(Garbage Collection, GC)机制是 JVM 中非常重要的一个部分。垃圾回收的主要任务是自动管理内存,回收那些不再被使用的对象,从而释放内…...

hadoop dfs web页面访问增加鉴权

前言 装好了Hadoop,通过浏览器访问,发现竟然不需要鉴权就能访问,且暴露了很多服务器层文件路径信息,基于多年积累的安全意识,必须得配置些鉴权信息,就有了该文,仅做学习记录,下次自…...

LCP 485. 最大连续 1 的个数[lleetcode -11]

从今天起,我们的算法开始研究搜索,首先就是DFS深度优先搜索(depth-first seach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍 历;因此遍历需要用先入后出的栈来实现,也可以通过…...

关于宏任务的说法已经过时

关于宏任务w3c的最新解释,(mdn已经搜不到宏任务队列) ● 每个任务都有一个任务类型,用一个类型的任务必须在一个队列,不同类型的任务可以分属不同的队列。在一次事件循环当中,浏览器可以根据实际情况从不同…...

Java箱与泛型

大O的渐进表示法 大 O 的渐进表示法 去掉了那些对结果影响不大的项 &#xff0c;简洁明了的表示出了执行次数。 void func1(int N){ int count 0; for (int i 0; i < N ; i) { for (int j 0; j < N ; j) { count; } } for (int k 0; k < 2 * N ; k) { count; } in…...

QT如何判断一个文件是否存在

在Qt中&#xff0c;判断一个文件是否存在是一个常见的操作&#xff0c;可以通过QFile类和QDir类来实现。不过&#xff0c;对于简单的文件存在性检查&#xff0c;QFile类提供的接口更为直接。下面是一个使用QFile类来判断文件是否存在的例子&#xff1a; #include <QFile>…...

Vim笔记

【指尖飞舞&#xff1a;vscode vim 高效开发&#xff08;系列视频&#xff09;】https://www.bilibili.com/video/BV1z541177Jyp16&vd_source23e4761174881d73295e362ffd706749 Vscode vim插件配置-CSDN博客 g_跳到行尾最后一个非空字符 gd :go to definition ctrl (o): …...

宝塔部署Vue项目解决跨域问题

一、前言 使用宝塔面板部署前端后端项目相比用命令行进行部署要简单许多&#xff0c;宝塔的可视化操作对那些对Linux不熟悉的人很友好。使用宝塔部署SpringBoot后端项目和Vue前端项目的方法如下&#xff1a; 1、视频教程 2、文字教程1 3、文字教程2 以上的教程完全可以按照步骤…...

C++智能指针简述

auto_ptr 设计目的&#xff1a;超出作用域&#xff0c;自动释放内存。所有权传递&#xff1a;拷贝auto_ptr时&#xff0c;原指针失效&#xff0c;释放所有权&#xff1b;新指针获得所有权。总而言之&#xff0c;允许通过拷贝转移所有权&#xff0c;独占所有权。缺陷&#xff1…...

龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了改进和优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以…...

Android Camera系列(二):TextureView+Camera

两岸猿声啼不住&#xff0c;轻舟已过万重山—李白 Android Camera系列&#xff08;一&#xff09;&#xff1a;SurfaceViewCamera Android Camera系列&#xff08;二&#xff09;&#xff1a;TextureViewCamera Android Camera系列&#xff08;三&#xff09;&#xff1a;GLS…...

DFS算法专题(一)——二叉树中的深搜【回溯与剪枝的初步注入】

目录 1、DFS算法简介 2、算法实战应用【leetcode】 2.1 计算布尔二叉树的值 2.1.1 算法原理 2.1.2 算法代码 2.2 求根节点到叶节点数字之和 2.2.1 算法原理 ​2.2.2 算法代码 2.3 二叉树剪枝 2.3.1 算法原理 2.3.2 算法代码 2.4 验证二叉搜索树 2.4.1 算法原理 …...

AWS SES服务 Golang接入教程(排坑版)

因为刚来看的时候 也迷迷糊糊的 所以 先讲概念 再上代码 一 基础设置 这里需要完成两个最基础的设置任务 1 是验证至少一个收件电子邮箱 2 【很关键】是验证发送域。即身份里的域类型的身份。&#xff08;可以理解为配置你的域名邮箱服务器&#xff08;SMPT&#xff09;为亚马…...

Vite + Vue3 +Vant4出现Toast is not a function

今天写前端的时候出现了这个问题搞了我一会 搜集原因: 1:是vant版本的问题&#xff0c;Toast()的方法是vant3版本的写法&#xff0c;而我用的是vant4&#xff0c;vant4中的写法改成了showToast()方法&#xff0c;改正过来 import {showToast} from "vant"; 发现还是…...

保姆级教程:在Ubuntu 20.04上搞定Isaac Gym Preview 4和强化学习环境(含常见libpython报错解决)

保姆级教程&#xff1a;在Ubuntu 20.04上搞定Isaac Gym Preview 4和强化学习环境&#xff08;含常见libpython报错解决&#xff09; 刚接触Isaac Gym的机器人/强化学习新手&#xff0c;往往会在环境配置阶段遇到各种依赖问题。本文将提供一个从零开始的详细安装指南&#xff0c…...

PostGIS中ST_Area计算面积时单位转换的实用技巧

1. 为什么ST_Area在WGS84坐标系下计算结果不对劲&#xff1f; 第一次用PostGIS的ST_Area函数计算地理围栏面积时&#xff0c;我盯着屏幕上那个小得离谱的数字愣了半天——0.000002&#xff1f;这还没我家卫生间大&#xff01;后来才发现&#xff0c;原来90%的新手都会在这个坑里…...

FixPlus-v1.56.148 一键擦除,会员功能直接解锁

核心功能 AI智能擦除技术可精准识别并移除照片中的干扰元素&#xff08;如路人、杂物&#xff09;&#xff0c;自动填补背景&#xff0c;处理效果自然无痕。AI换衣功能支持智能服装替换与风格调整&#xff0c;为创意编辑提供更多可能。 操作便捷性 无需专业技巧&#xff0c;通…...

Multisim新手必看:用差分放大电路课设,手把手教你搞定仿真与波形分析

Multisim新手必看&#xff1a;用差分放大电路课设&#xff0c;手把手教你搞定仿真与波形分析 第一次打开Multisim时&#xff0c;满屏的元器件和复杂的参数设置确实容易让人望而生畏。记得我大三做模电课设时&#xff0c;光是找齐差分放大电路需要的元件就花了半小时&#xff0c…...

EcomGPT-7B模型文件结构与代码解读:从Hugging Face到生产部署

EcomGPT-7B模型文件结构与代码解读&#xff1a;从Hugging Face到生产部署 如果你已经玩过一些开箱即用的AI模型&#xff0c;可能会好奇&#xff0c;一个像EcomGPT-7B这样的模型&#xff0c;它到底是由哪些文件组成的&#xff1f;那些配置文件里密密麻麻的参数都是什么意思&…...

5分钟搞定!Windows直接安装APK的终极免费方案

5分钟搞定&#xff01;Windows直接安装APK的终极免费方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾想在Windows电脑上直接安装安卓应用&#xff0c;却因…...

告别视图切换混乱:用快马平台和cc-switch提升前端开发效率

告别视图切换混乱&#xff1a;用快马平台和cc-switch提升前端开发效率 最近在开发一个需要多工作模式切换的项目时&#xff0c;遇到了视图管理混乱的问题。不同模式下的UI组件互相干扰&#xff0c;状态管理变得异常复杂。经过一番摸索&#xff0c;我发现cc-switch这个方案能很…...

Z-Image-Turbo镜像实战教程:开箱即用,9步生成高清图片

Z-Image-Turbo镜像实战教程&#xff1a;开箱即用&#xff0c;9步生成高清图片 1. 为什么选择Z-Image-Turbo镜像 如果你正在寻找一个能快速生成高质量图片的AI工具&#xff0c;Z-Image-Turbo镜像可能是目前最省心的选择。这个镜像最大的优势在于它已经预置了完整的32GB模型权重…...

基于 stm32 智能水壶的设计与实现

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…...

【完整源码+数据集+部署教程】光纤缺陷检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

一、背景意义 随着光纤通信技术的迅猛发展&#xff0c;光纤作为信息传输的主要媒介&#xff0c;其质量的优劣直接影响到通信系统的性能和稳定性。光纤在生产、运输和安装过程中&#xff0c;可能会出现各种缺陷&#xff0c;如划痕、气泡、折弯等&#xff0c;这些缺陷不仅会导致信…...