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

【C进阶】指针的高级话题

文章目录

  • :star:1. 字符指针
  • :star:2. 指针数组
    • 2.1 指针数组的定义
    • 2.2 指针数组的使用
  • :star:3. 数组指针
    • 3.1 数组的地址
    • 3.2 数组指针的使用
  • :star:4. 数组参数和指针参数
  • :star:5. 函数指针
    • 5.1 函数名和函数的地址
    • 5.2 练习
  • :star:6. 函数指针数组
    • 6.1 转移表
  • :star:7. 指向函数指针数组的指针
  • :star:8. 回调函数
  • :star::star:总结(思维导图)

回顾

在指针初阶时我们已经见过指针了,我们来回顾一下指针的几个知识点
1.指针是一个变量,用来存放的地址,地址唯一标识了一块空间
2.指针的大小是4/8个字节(32/64)平台
3.指针的类型决定了指针± 整数向后跳过多少个字节以及对指针解引用时的访问权限有多大
4.指针可以进行算术运算和关系运算’
5.无法访问野指针

本章重点

1.字符指针
2.指针数组
3.数组指针
4.数组和指针作为参数
5.函数指针
6.函数指针数组
7.指向函数指针数组的指针
8.回调函数

⭐️1. 字符指针

整形指针是一个指向整形的指针变量
浮点型指针是一个指向浮点型的指针变量
字符指针是一个指向字符的指针变量,字符指针的值是字符变量的地址

定义指针变量有两种方式

  • 将单个字符变量的地址赋给字符指针
  • 将字符串常量第一个元素的地址赋给字符指针
#include <stdio.h>
//字符指针的定义
int main()
{char* p;char a = 'a';p = &a;p = "abc";	//表示将字符串常量的第一个字符的地址赋给pchar str[] = "abc";p = str;	//表示将字符数组首元素的地址赋给preturn 0;
}

注:当字符串常量出现在表达式右侧时,字符串常量的值在某些情况下是一个字符地址,该地址是字符串常量首元素的地址
例如在上述代码中,p = "abc",此时字符串常量的值是’a’的地址
但是在char str[] = "abc";,此时字符串常量不是地址,而是数组的元素等价于char str[] = {'a', 'b', 'c', '\0'}

在C语言中,当字符串常量作为一个地址时,操作系统会在静态存储区给字符串常量分配一个地址并将字符串的值置为首元素的地址
例如p = "abc"操作系统首先给字符串常量"abc"在静态存储区分配地址,并且将a的地址赋给变量p,不可以通过解引用p修改p指向的字符串常量
在这里插入图片描述

⭐️2. 指针数组

整形数组中数组的元素是整形
字符数组中数组的元素是字符
指针数组中数组的元素是指针

2.1 指针数组的定义

在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型指向相同数据类型的指针变量

int main()
{int* arr[10];return 0;
}

[]的优先级比*高,所以arr和[]结合表示arr是一个数组

arr是一个一维数组名,数组元素是指向整形的指针
指针数组名是首元素的地址,首元素又是指针类型的变量,所以指针数组名是指针变量的地址及二级指针,需要用二级指针变量接受指针数组名

2.2 指针数组的使用

指针数组可以在以下几方面使用

  1. 字符串数组:在C语言中,字符串是一个以空字符(‘\0’)结尾的字符数组,通过指针数组可以方便地存储和处理多个字符串。例如,定义一个字符串数组char *str[3],可以存储三个字符串,并通过指针变量访问它们。
  2. 多维数组:指针数组可以用来实现多维数组的功能,例如,我们可以定义一个指针数组int *p[3],每个元素指向一个整型数组,就可以实现一个3行5列的二维数组。
char a[3][8]={"gain","much","strong"};
char *n[3]={"gain","much","strong"};

在这里插入图片描述
可以看出来,定义二维数组时所有的字符串是连续存放的,但是定义指针数组时,数组元素指向的字符串不一定是连续存放的

使用指针数组的优点是

  • 指针数组中每个元素所指的字符串不必限制在相同的字符长度
  • 访问指针数组中的一个元素是用指针间接进行的,效率比下标方式要高
int main(){int i;char* pch[6] = { "妹","妹","你","坐","船","头" };for (i = 0; i < 6; i++){printf("%s, ", pch[i]);}printf("\n");for (i = 5; i >= 0; i--){printf("%s\n", pch[i]);}return 0;
}

在这里插入图片描述

在访问元素时,指针数组名可以当成二维数组名来使用

在这里插入图片描述


⭐️3. 数组指针

指向整形的指针叫做整形指针
指向字符的指针叫做字符指针
指向数组的指针叫做数组指针

数组也有地址,那么数组的地址就可以用数组指针来存放

int main()
{int arr[10] = { 1, 2, 3, 4,5 ,6 , 7, 8, 9 ,10 };//定义了一个有十个元素的数组int(*parr)[10] = &arr;//定义了一个数组指针,该指针指向的是有10个int型的数据return 0;
}

3.1 数组的地址

我们知道整形的地址是第一个字节的编号
那么数组的地址是否是第一个元素的地址呢?
在这里插入图片描述
我们发现数组的地址和数组第一个元素的地址在上是相等的,
我们现在通过分别让它们±整数,观察它们的含义是否相等
在这里插入图片描述

指针类型的含义决定了指针±整数向后一步跨度有多大,因此数组的地址和数组首元素的地址值一样,含义不同,arr+1代表向后跳过一个整形的大小,&arr+1代表向后跳过整个数组的大小

3.2 数组指针的使用

我们先来看一个打印二维数组的函数

//数组指针的使用
void PrintArr1(int arr[][5], int row, int col)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){printf("%d ", arr[i][j]);}printf("\n");}
}

注:因为二维数组可以看成数组元素是一维数组的数组,因此二维数组的行下标二维数组名结合就是一个一维数组,而二维数组名又是首元素的地址即&arr[0],arr[0]又是一个一维数组,因此二维数组名是一个数组指针指向的数组元素的个数就是二维数组的列下标,这也是为什么二维数组传参时列下标不能省略的原因

上述代码还可以写成这种形式

void PrintArr2(int(*arr)[5], int row, int col)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){printf("%d ", arr[i][j]);}printf("\n");}
}

我们再来探讨以下表达式arr[i][j]的含义
在这里插入图片描述

数组指针可以当作二维数组名来使用

⭐️4. 数组参数和指针参数

这里将前面讲的内容做一个大致的总结

当形参是数组时

形参是一维数组

实参可以是一级指针
实参可以是普通变量的地址
实参可以是一维数组名

形参是二维数组

实参可以是二维数组
实参可以是数组指针

当实参是数组时

实参是一维数组

形参可以是一维数组名
形参可以是一级指针

实参是二维数组

形参可以是二维数组名
形参可以是数组指针

形参是指针

形参是一级指针

实参可以是一指针
实参可以是普通变量的地址
实参可以是一维数组ming

形参是二级指针

实参可以是二级指针变量
实参可以是一级指针变量的地址
实参可以是指针数组名

实参是指针

实参是一级指针

形参可以是一级指针
形参可以是一维数组名

实参是二级指针

形参可以是二级指针变量
形参可以是指针数组名


⭐️5. 函数指针

先来看一段代码
在这里插入图片描述
程序运行到50行后,会去寻找Add函数,是先寻找Add函数所在的地址(每一个函数都用自己的地址),然后再执行该地址处的代码

函数也有自己的地址,存放函数地址的指针叫做函数指针

int Add(int a, int b)
{return a + b;
}
int main()
{int(*pf)(int, int) = &Add;//定义了一个函数指针,指向的函数的形参是2个int,返回值是int//并且将函数Add的地址赋给了pf
}

5.1 函数名和函数的地址

在这里插入图片描述

函数的值和函数的地址在大多数情况下是等价的
但是在函数调用时不可以&函数名调用函数

正是因为函数的值和函数的地址是一样的,这就导致对函数指针解引用n次最后的到的还是函数本身的值也就是函数的地址
在这里插入图片描述

函数调用可以通过函数指针来进行


在这里插入代码片

5.2 练习

分析下面代码含义

1.(*(void (*)())0)();

在这里插入图片描述

  1. 先看2-8,3和4说明了2-7是一个函数指针类型,指向的函数的返回值是void,函数的参数是void
  2. 2-8将数字0强转成一个函数指针类型
  3. 1-9将地址处为0的地址解引用得到一个参数为void的函数
  4. 1-10调用地址处为0的函数

这段代码的含义是将地址为 0 的内存空间强制类型转换为一个返回值为 void 类型、参数列表为空的函数指针类型,并对该指针进行解引用,即调用该地址上存储的函数。
由于该代码中将地址 0 强制类型转换为一个函数指针并进行解引用,因此该代码通常会被认为是一种非常危险的行为,因为在绝大多数操作系统中,地址 0 存储了操作系统保留的内存空间,不允许用户程序直接访问和修改。

因此,这段代码可能会导致系统崩溃或者其他严重后果。一般情况下,我们不应该编写这样的代码。如果确实需要进行类似的操作,也应该确保该地址指向的是一个合法的函数。

2.void (*signal(int , void(*)(int)))(int);

在这里插入图片描述

  1. signal是一个函数2-8说明了signal函数的参数一个是iint,另一个是指向参数为Int,返回值为void的函数的指针
  2. 1-19说明了signal函数的指针返回值是只一个函数指针,指针指向的是参数为Int,返回值为void的函数
    该代码可以简化
    typedef void(*f_return)(int)
    代码变为f_return signal(int, f_return)

总结

  1. 解引用函数指针n次得到的是函数本身
  2. 不可以&函数名来调用函数

⭐️6. 函数指针数组

函数指针数组是一个数组,数组元素是指向函数的指针

//函数指针数组
int Add(int a, int b)
{return a + b;
}int Sub(int a, int b)
{return a - b;
}int Div(int a, int b)
{return a / b;}int Mul(int a, int b)
{return a * b;
}int main()
{//arr_Pf是一个数组,数组元素是指向参数为int,int返回值为int函数的指针int(*arr_Pf[5])(int, int) = { 0, Add, Div, Div, Mul };
}

结合函数指针,我们可以通过函数指针数组元素来调用函数

6.1 转移表

//函数指针数组
int add(int a, int b)
{return a + b;
}int sub(int a, int b)
{return a - b;
}int div(int a, int b)
{return a / b;}int mul(int a, int b)
{return a * b;
}void menu()
{printf("***************************\n");printf("  1. add	    2. sub        \n");printf("  3. div	    4. mul    \n");printf("         0. exit          \n");printf("***************************\n");}
int main()
{//arr_pf是一个数组,数组元素是指向参数为int,int返回值为int函数的指针int(*arr_pf[5])(int, int) = { NULL, add, sub, div, mul };//因为0充当的是exit,所以数组下标为0规定为NULLint input = 1;int a, b;while (input){menu();printf("请选择你需要的操作->\n");scanf("%d", &input);if (input != 0){printf("请输入两个操作数->\n");scanf("%d%d", &a, &b);printf("结果是%d\n", arr_pf[input](a, b));}}return 0;}

使用转移表可以简化代码量,试想一下,如果没有转移表,当我们想实现的功能越来越多时,代码将会有大量的switch case语句

⭐️7. 指向函数指针数组的指针

指向函数指针数组的指针是一个指针,指针指向的是一个数组,数组元素是函数指针

//指向函数指针数组的指针
void test(const char* str)
{printf("%s\n", str);
}int main()
{//函数指针pfunvoid(*pfun)(const char*) = test;//函数指针的数组pfunArrvoid (*pfunArr[5])(const char* );pfunArr[0] = test;//指向函数指针数组pfunArr的指针ppfunArrvoid(*(*pfunArr)[5])(const char*);return 0;
}

认识它的声明即可,因为我也不知道可以用在哪些方面😢😢
面向gpt编程😜😜
在这里插入图片描述


⭐️8. 回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。通过函数指针被调用的函数称为回调函数

回调函数的用法详见万能排序qsort

⭐️⭐️总结(思维导图)

最后当然是最重要的思维导图啦😆

在这里插入图片描述

写在最后:

周末花一天时间肝出来的,明天又要开始上课了💢,以后一个星期能更2篇就不错了,继续保持吧,希望这篇流量能高一点 😃 最后如果本章内容对你有帮助,请留下您的三连,感谢!!!😄😄😄

相关文章:

【C进阶】指针的高级话题

文章目录:star:1. 字符指针:star:2. 指针数组2.1 指针数组的定义2.2 指针数组的使用:star:3. 数组指针3.1 数组的地址3.2 数组指针的使用:star:4. 数组参数和指针参数:star:5. 函数指针5.1 函数名和函数的地址5.2 练习:star:6. 函数指针数组6.1 转移表:star:7. 指向函数指针数组…...

无源晶振匹配电容—计算方法

以前有写过一篇文章“晶振”简单介绍了晶振的一些简单参数&#xff0c;今天我们来说下无源晶振的匹配电容计算方法&#xff1a; 如上图&#xff0c;是常见的的无源晶振常见接法&#xff0c;而今天来说到就是这种常见电路的电容计算方法&#xff0c;有两种&#xff1a; A&#…...

【测试】自动化测试03(JUnit)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录JUnit一&#xff09; 注解1. Test2. BeforeEach3. BeforeAll4. AfterEach5. AfterAll二&#xff09; 断言&#xff08;Assertions类&#xff09;三&#xff09;用例的执行顺序四&#xff09;参数化五&#xff09;测试…...

《计算机视觉和图像处理简介 - 中英双语版》:神经网络中的激活函数 ReLU vs Sigmoid

文章大纲 Neural Network Module and Training Function创建数据集Define Neural Network, Criterion function, Optimizer and Train the ModelTest Sigmoid and ReluAnalyze Results参考文献与学习路径在本文中,我们使用含有两个隐藏层的神经网络基于MNIST数据集测试Sigmoid…...

(三十七)大白话SQL标准中对事务的4个隔离级别,都是如何规定的呢?

之前我们给大家讲了数据库中多个事务并发时可能产生的几种问题&#xff0c;包括了脏写、脏读、不可重复读、幻读&#xff0c;几种问题 那么针对这些多事务并发的问题&#xff0c;实际上SQL标准中就规定了事务的几种隔离级别&#xff0c;用来解决这些问题。 注意一下&#xff…...

全国计算机等级考试三级网络技术考试大纲(2022年版)

全国计算机等级考试三级网络技术考试大纲&#xff08;2022年版&#xff09;基本要求 &#xff11;&#xff0e; 了解大型网络系统规划、管理方法&#xff1b; &#xff12;&#xff0e; 具备中小型网络系统规划、设计的基本能力&#xff1b; &#xff13;&#xff0e; 掌握中小…...

服务器部署—若依【vue】如何部署到nginx里面?nginx刷新页面404怎么办?【完美解决建议收藏】

服务器部署项目我们大家都会遇到&#xff0c;但是有些铁子会遇到很多的问题&#xff0c;比如前端部署nginx如何操作&#xff1f; 前端有单纯的静态页面、还有前后端分离的项目&#xff1b;这里博主直接分享最牛最到位的前后端分离项目的前端部署到nginx上面&#xff0c;以若依项…...

算法练习(特辑)算法常用的数据结构、集合和方法总结

一、栈stack 1、初始化&#xff1a;Stack<Integer> st new Stack<Integer>(); 2、常用方法&#xff1a; boolean empty() &#xff1a;测试堆栈是否为空。Object peek( )&#xff1a;查看堆栈顶部的对象&#xff0c;但不从堆栈中移除它。Object pop( )&#xff…...

Apk转Aab(Android-App-Bundle)

这篇文章是参考Apk转Aab(Android-App-Bundle)_YoungBillsohu的博客-CSDN博客 基本照着这个大佬的步骤来就行&#xff0c;但是要注意的是apkTool最好是下新的&#xff0c;否则&#xff0c;会出现说一堆无语的错误&#xff0c;然后导致AAPT2关联资源的时候报错 类似这样的&#…...

大学物理期末大题专题训练总结-热学大题

今天下午去找郑老师权老师等去答疑&#xff0c;老师说大题会考查得比较套路&#xff0c;计算不难。明天就要考试了&#xff0c;再把大题常见题型总结一下&#xff0c;热学这块我做完了蓝本的热学题目&#xff0c;发现了如下三种&#xff1a;有关循环过程曲线的&#xff1a;给出…...

有趣的Hack-A-Sat黑掉卫星挑战赛——卫星平台内存dump

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加&#xff0c;太空已经成为国家赖以生存与发展的命脉之一&#xff0c;凝聚着巨大的国家利益&#xff0c;太空安全的重要性日益凸显[1]。而在信息化时代&#xff0c;太空安…...

OAK相机如何将yoloV8模型转换成blob格式?

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…...

Python解题 - CSDN周赛第32期 - 运输石油(三维背包)

上期周赛因为最后一题出现bug&#xff0c;再加上都是经典的模板题&#xff0c;问哥就懒得写题解了。 本期也是有两道考过的题目&#xff0c;不过最后一题因为考到了背包问题的特殊类型&#xff0c;还是值得拿出来记个笔记。 第一题&#xff1a;传奇霸业 传奇霸业&#xff0c;是…...

JVM - G1垃圾收集器深入剖析

​​​​​​​1、G1收集器概述 HotSpot团队一直努力朝着高效收集、减少停顿(STW: Stop The World)的方向努力&#xff0c;也贡献了从串行Serial收集器、到并行收集器Parallerl收集器&#xff0c;再到CMS并发收集器&#xff0c;乃至如今的G1在内的一系列优秀的垃圾收集器。 G…...

角度制与弧度制的相互转换np.deg2radnp.rad2deg

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】角度制与弧度制的相互转换np.deg2radnp.rad2deg选择题以下关于python代码表述错误的一项是?import numpy as npprint("【执行】np.rad2deg(np.pi)")print(np.rad2deg(np.pi))print(&…...

【SAP Abap】X-DOC:SAP ABAP 语法更新之一(Open SQL新增特性)

SAP ABAP 语法更新之一&#xff08;Open SQL新增特性&#xff09;1、前言2、演示1、前言 自从 SAP 推出 SAP ON HANA&#xff0c;与之相随的 AS ABAP NW 7.40 版本以后&#xff0c;ABAP 语法也有了较多的更新&#xff0c;本篇对 Open Sql的语法更新部分做一个DEMO演示。 NW 7…...

【改进灰狼优化算法】改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…...

Linux C代码获取线程ID

Linux C代码获取线程ID gettid可以获取线程id,但是通过man gettid可以看到下面这两句 也就是说glibc没有为这个gettid封装系统调用&#xff0c;需要使用syscall。 #define _GNU_SOURCE#include <unistd.h>#include <sys/syscall.h>#include <sys/types.h>pi…...

基本密码技术

AESAES取代DES&#xff0c;是一种对称加密技术&#xff0c;分为AES-128/192/256, 其分组长度固定为128b&#xff0c;若最后一个分组长度不够&#xff0c;需要补全至128b长度。所支持的秘钥长度分别为128b/192b/256b.分组密码模式AES是对明文进行分组之后逐块进行加密&#xff0…...

【力扣周赛#334】6369. 左右元素和的差值 + 6368. 找出字符串的可整除数组 + 6367. 求出最多标记下标

目录 6369. 左右元素和的差值 - 前缀后缀和 ac 6368. 找出字符串的可整除数组 - 操作余数ac 6367. 求出最多标记下标 - 二分答案 贪心 6369. 左右元素和的差值 - 前缀后缀和 ac class Solution {public int[] leftRigthDifference(int[] nums) {int nnums.length;int[] re…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...