响应式网站开发需要的条件/网络赚钱推广

响应式网站开发需要的条件,网络赚钱推广,合肥建设局网站首页,网站建设及维护业务服务合同指针 预备知识 内存地址 字节:字节是内存的容量单位,英文名Byte,1Byte8bits 地址:系统为了便于区分每一个字节面对它们的逐一进行编号(编号是唯一的),称为内存地址,简称地址。int…

指针

预备知识

内存地址
  • 字节:字节是内存的容量单位,英文名Byte,1Byte=8bits

  • 地址:系统为了便于区分每一个字节面对它们的逐一进行编号(编号是唯一的),称为内存地址,简称地址。int a=5;

基地址(首地址)
  • 单字节数据:对于单字节数据而言,其地址就是其字节编号。举例:char a='A'

  • 多字节数据:对于多字节数据而言,其地址是所有字节中编号最小的那个,称为基地址()

取地址符
  • 每个变量都是一块的内存,都可以通过取址符&获取其地址。

  • 例如:

     int a=100;printf("整型变量a的地址是:%p\n",&a);//64位系统,是12位16进制int c='x';printf("字符变量c的地址是:%c");
  • 主语:

    • 虽然不同的变量的尺寸是不同的,但是它们的地址尺寸是一致的。

    • 不同的地址虽然形式上看起来是一样的,但由于它们代表的内存尺寸和类型都不同,因此它们在逻辑上严格区分的。

为什么要引入指针

  • 为函数修改实参提供支持。

  • 为动态内存管理提供支持。

  • 为动态的的数据结构(链表、队列等)提供支持

  • 为内存访问提拱了另一种途径。

变量指针与指针变量

指针概念
内存单元与地址机制
  • 内存单元划分

    • 系统将内存划分为连续的基本存储单元,每个单元的容量为1字节(8bits)

    • 每个内存单元拥有唯一编号。称为内存地址(十六进制表示:)

  • 变量存储特性

    • 变量根据数据类型占据不同数量的内存单元:

      • char 类型占1个字节(1个单元)

      • int 类型占4个字节(4个单元)

      • double类型占8个字节(8个单元)

    • 变量的基地址(首地址)是其首个内存单元的地址(首地址一般是这个一组编号中最小的那个)

变量指针与指针变量
对比维度变量指针指针变量
本质内存地址(首地址\基地址) 变量指针其实就是变量的首地址存储地址的普通变量
操作符&(取地址符)*(声明符,解引用符,如:int *p
代码示例&a(获取变量a地址)int* p =&a
核心特性不可修改(地址由系统分配)可修改指向(p=&b
指向:
指针变量中存放 谁 的地址,就说明该指针变量指向了 谁
指针的尺寸

系统类型指针尺寸地址位数十六进制显示长度
32位系统4字节(int)32bit8位(如0x0804A000)
64位系统8字节(long)48bit12位(如0x7FFDEADBEEF)
指针的本质
  • 变量指针:数据的门牌号(&a)

  • 指针变量:存储门牌号的笔记本(int *p)

  • 指向操作:通过门牌号访问数据(*p)

 int a=10;printf("%d\n",a);//访问a的值​int *p=&a;printf("%d\n",*p);//访问p指向a的值,其实就是访问a的值

小贴士:

Linux系统中打印地址时,最多显示12个十六进制数,为什么? Linux64位操作系统中,一个内存地址占8个字节,一个字节8bit位,所以一个地址88=64bit位,每4个bit可以表示1个十六进制数; 64个bit位用十六进制表示最多有16个数值位; 系统为了寻址方便,默认当前计算机系统没必要寻址64bit为,只寻址了48个bit为,所以用12个十六进制数表示一个地址 二进制: 01001010 十六进制:0x4A 416+10=74 注意: 在Linux64位操作系统中,指针类型的变量占8个字节的内存空间 在Linux32位操作系统中,指针类型的变量占4个字节的内存空间

内存数据的存取方式

在c语言中对内存数据(变量、数组元素等)的存取有两种方式:

直接存取
  • 通过基本类型(整型、浮点型、字符型)的变量,访问这个变量代表内存空间的数据

  • 通过数组元素的引用,访问这个引用代表的内存空间数据

     //基本类型变量int a=10;//存printf("%d\n",a);//取​//数组元素int arr[]={11,12,13};//存arr[0]=66;//存printf("%d\n",arr[0]);//取
间接存取
  • 通过指针变量,间接访问内存中的数据

  • 解引用符*:读作声明符或者解引用符。如果*前面有数据类型,读作声明指针;如果*前面没有数据类型,读作解引用。

    案例

      #include <stdio.h>int main(int argc,char *argv[]){// 定义一个普通变量int a = 3;​// 定义一个指针变量,并赋值int* p = &a; // *p前面的数据类型是用来修饰 = 后面的 a的类型// 访问变量a,直接访问printf("直接访问-%d\n",a);// 访问变量a,通过指针变量p访问,间接访问printf("间接访问-%d\n",*p);// *p 叫做解引用// 访问指针变量p的值,也就是访问变量a的地址 %p 输出 变量的地址printf("地址访问-%p,%p,%p\n",p,&p,&a);return 0;}​​

    变量指针与指针变量

    指针变量的定义

    语法:

     数据类型 *变量列表

    举例:

     int a;//普通变量,拥有真实的数据存放空间int *a_,*b_;//指针变量,无法存放数据,只能存储其他变量的地址

    注意:指针变量的值只能是8、12位的十六进制整数

    注意:

    ①虽然定义指针变量*a,是在变量名前加上*,但是实际变量名依然为a,而不是*a

    ②使用指针变量间接访问内存数据时,指针变量必须要明确的指向。(指向:指针变量存放谁的地址,就指向谁)

    ③如果想要借助指针变量间接访问指针变量保存的内存地址上的数据,可以使用指针变量前加*,来间接返回访问。指针变量前加*,如果不带数据类型,就称之为对指针变量解引用

     int i=5,*p;p=&i;//将i的地址赋值给指针变量p;printf("%lx,%p,%p\n",p,p,&p); %p-&p(p自己的地址)  %p- p(i对应的地址)printf("%d\n",*p);解引用所储存变量空间的地址*p=10;//间接给p对应的地址上的数据空间赋值,也就是给变量i赋值printf("%d,%d\n",*p,i);//10 10

    ④指针变量只能指向同类型的变量,借助指针变量访问内存,一次访问内存

    大小是取决于指针变量的类型

     int a=10;int *p=&a;//*p前面的类型是p指向变量a的类型,这个类型要么完全一致,要么可以转换

    ⑤指针变量在定义时可以初始化,这一点和普通变量是一样的。

     int a=5;int *p=&a;//定义指针变量的同时初始化printf("%d\n",*p);​int b;int *p1=&b; //指针初始化的时候,不需要关注指向变量空间中是否有值printf("%d\n",*p1); 会出错
    指针变量的使用

    使用

    • 指针变量的赋值

       //方式1int a, *p;p=&a;// 先定义,后赋值​​//方式2int a1,*p1,*q1=&al; //定义并初始化p1=ql;//其实就是变量赋值,指针变量q1的值赋值给p1,此时q1和p1同时指向a1
    • 操作指针变量的值

       int a,*p,*q=&a;p=q;//将指针变量q的值赋值给指针变量p,此时p和q都指向了变量a​printf("%p",p);//访问的是指针变量p的值(也就是变量a的地址)printf("%p",q);
    • 操作指针变量指向的值

       int a=6;*q=&a,b=25;//一定要注意指针变量q的变量名就是q*q=10;//访问q指向的变量a的空间,其实就是间接的给a赋值(a=10)printf("%d,%d\n",*q,a);//10  10​q=&b;//一个指针变量只能同一时刻指向一个变量,但是一个变量可以同时被多个指针变量指向​printf("%d,%d\n",*q,a);// 25  10
    两个指针运算符使用
    • &取地址运算符。&a是变量a的地址。这个是变量指针

    • *指针运算符、解引用符、间接访问运算符,*p是指针变量p指向的对象值。这个是指针变量。

    案例

    案例1

    • 需求:通过指针变量访问整型变量

    • 分析:

    • 代码:

       #include <stdio.h>​void main(){int a=3,b=4,*p1=&a,*p2=&b;printf("a=%d,b=%d\n",*p1,*p2);​}

    案例2

    • 需求:声明a,b两个变量,使用间接存取的方式实现数据交换。

    • 分析:

    • 代码:

       #include <stdio.h>int main(){int a=3,b=4,*p_a=&a,*p_b=&b,*p_t;printf("交换前为%d,%d\n",*p_a,*P_b);//3,4//交换位置p_t=p_a;P_a=P_b;p_b=p_t;printf("交换后为%d,%d,%d,%d\n",*p_a,*P_b);}

      总结:此时改变的只是指针的指向,原始变量a,b中数据并没有发生改变

    • 代码:数据改变,不推荐

       #include <stdio.h>int main(){int a=3,b=4,*p_a=&a,*p_b=&b,temp;printf("交换前为%d,%d\n",*p_a,*P_b);//3,4//交换位置temp=*p_a;*P_a=*P_b;*p_b=temp;printf("交换后为%d,%d\n",*p_a,*P_b);}

      总结:此时改变的只是指针的指向,原始变量a,b中数据发生改变

    案例3

    • 需求:输入a、b两个整数,按先大后小的顺序输出a和b

    • 分析:

    • 代码:指向改变

       #include <stdio.h>int main(){int a=3,b=4,*p_a=&a,*p_b=&b,*p_t;if(a<b){p_t=p_a;P_a=P_b;p_b=p_t;}//交换位置printf("按从小到大的顺序输出a,b的值%d>%d\n",*p_a,*P_b);}

    • 代码:

       #include <stdio.h>int main(){int a=3,b=4,*p_a=&a,*p_b=&b,temp;printf("交换前为%d,%d\n",*p_a,*P_b);//3,4if(a<b){//交换位置temp=*p_a;*P_a=*P_b;*p_b=temp;}printf("按从小到大的顺序输出a,b的值%d>%d\n",*p_a,*P_b);}

    指针变量做函数参数

    指针变量做函数参数往往传递的是变量的地址(基地址),借助与指针变量间接访问是可以修改实参变量数据的。

    案例:

    • 需求:有a,b两个变量,要求交换后输出(要求函数处理,用指针变量做函数的参数)

    • 方式1:交换指向(指针指向发生改变,指针指向的对象的值不变)

       #include <stdio.h>//定义一个函数,实现两个数的交换​void swap(int *p_a,int *p_b){int *p_t;//以下写法只会改变指针指向 不会改变指向对象的值p_t=p_a;P_a=P_b;p_b=p_t;printf("%d,%d\n",*P_a,*p_b);}​int main(){int a=3,b=5,*p_a=&a,*p_b=&b,*p_t;swap(&a,&b);printf("a=%d,b=%d\n",a,b)return 0;}

    • 方式2:交换数据(指针指向不改变,指针指向对象的值发生变化)

       #include <stdio.h>​void swap(int *p_a,int *p_b){int temp;//以下写法只会改变指针指向 不会改变指向对象的值temp=*p_a;*P_a=*P_b;*p_b=temp;printf("%d,%d\n",*P_a,*p_b);}​​int main(){int a=3,b=4,*p_a=&a,*p_b=&b,temp;swap(&a,&b);printf("a=%d,b=%d\n",a,b);}

    指针变量指向数组元素
    数组元素指针
    • 数组的指针就是数组中的第一个元素的地址,也就是数组的首地址

    • 数组元素的指针是指数组的首地址。因此,同样可以用指针变量来指向数组或数组元素。

    • 在C语言中,由于数组名代表数组的首地址,因此,数组名实际上也是指针,访问数组名就是访问数组首地址

     #include <stdio.h>//定义一个函数,实现两个数的交换​​​int main(){int arr[]={11,12,13};int *p1=arr[0];int *p2=arr;printf("%p,%p,%p\n",p1,p2,arr);return 0;}

    注意:虽然我们定义一个指针变量接收了数组地址,但不能理解为指针变量指向了数组。而应该理解为指向了数组的元素(默认为第1个元素)。

    指针运算

    指针运算:前提是指针变量必须要指向数组的某个元素。(指针运算只能发生在同一数组)

    序号指针运算说明
    1自增:p++、++p、p=p+1、p+=1指向下一个元素的地址
    2自减:p--、--p、p-=1指向下一个元素的地址
    3加n个数:p+n(n*sizeof(type))后n个元素的(首)地址
    4减n个数:p-n前n个元素的(首地址)
    5指针相减:p1-p2p1,p2之间相差几个元素
    6指针比较:p1<p2前面的指针小于后面的指针

    说明: ①如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素。即p+1或p-1也表示地址。但要注意的是,虽然指针变量p中存放的是地址,但p+1并不表示该地址加1,而表示在原地址的基础上加了该数据类型所占的字节数d(d=sizeof(数据类型))。 ②如果p原来指向a[0],执行++p后p的值改变了,在p的原值基础上加d,这样p就指向数组的下一个元素a[1]。d是数组元素占的字节数。 ③如果p的初值为&a[0]则p+i和a+i就是数组元素a[i]的地址,或者说,它们指向a数组的第i个元素。 ④*(p+i)(a+i)是p+i或a+i所指向的数组元素,即a[i]。 ⑤如果指针变量p1和p2都指向同一数组,如执行p2-p1,结果是两个地址之差除以数组元素的长度d。

     #include <stdio.h>​int main(){int arr[]={11,22,33,44,55};int *p1=arr+4;//55等价于arr[4]int *p2=arr+1;//22等价于arr[1]aiprintf("%ld\n",p1-p2);//3      4*4-1*4=12   12(相差的字节数)/4(每个元素的大小ai)=3(元素的大小)return 0;}
    案例

    案例1

    • 需求:通过下标法和指针法遍历数组

    • 代码:

       #include <stdio.h>​//下标法遍历数组void arr1(int arr[],int len){//通过循环遍历for(int i=0;i<len;i++){printf("%-3d",arr[i]);}printf("\n");}​void arr2(int arr[],int len){int *p=arr;register int i=0;for(;i<len;i++){printf("%-3d",*p;p++;}printf("\n");​}​​void arr3(int arr[],int len){int *p=arr;register int i=0;for(;i<len;i++){printf("%-3d",*(arr+i));}printf("\n");}​​int main(){int array[]={11,22,33,44,55};int len=sizeof(arr)/sizeof(arr[0]);arr1(array,len);arr2(array,len);arr3(array,len);return 0;}​​
       #include <stdio.h>​int arr2() {int arr1[] = {11, 22, 33, 44, 55, 66, 77, 88};int *p = arr1;​// 1. 输出数组首元素 11printf("%d\n", *p); ​// 2. 指针后移,输出 22p++;printf("%d\n", *p); ​// 3. 先取值 22,指针再后移。此时 x=22,p 指向 33int x = *p++; printf("%d,%d\n", x, *p); // 输出 22,33​// 4. 指针先前移到 44,取值 44。y=44,p 指向 44int y = *(++p); printf("%d,%d\n", y, *p); // 输出 44,44​// 5. 对当前指向的元素(44)自增,变为 45(*p)++; printf("%d\n", *p); // 输出 45​return 0;}​int main(int argc, char *argv[]) {arr2();return 0;}

      *p++ 先解引用p,然后p这个指针自增

       int arr[]={11,22,33},*p=arr;int x=*p++;     

      (*p)++ 先解引用p,然后使用解引用出来的数据自增

       int arr[]={11,22,33};*p=arr;int x=(*p)++;

    通过指针引用数组元素

    引用一个数组元素,可以用:

    ①下标法:如:arr[i]形式

    ②指针法:如:*(arr+i)或者*(p+i),其中arr是数组名,p是指向数组元素的指针变量,其初始值;p=arr;

    案例:

    需求:有一个整型数组arr,有十个元素,输出数组中的全部元素。

    • 下标法:(通过改变下标输出所有元素)

       #include <stdio.h>void main(){int arr[10];int i;// 给数组元素赋值for(i = 0; i < 10; i++)scanf("%d",&arr[i]);// 遍历数组元素for(i = 0; i < 10; i++)printf("%-4d%",*(arr + i));printf("\n");   }

    • 指针法(地址):(通过数组名计算出数组元素地址,找出数组元素)

       #include <stdio.h>void main(){int arr[10];int i;// 给数组元素赋值for(i = 0; i < 10; i++)scanf("%d",&arr[i]);// 遍历数组元素for(i = 0; i < 10; i++)printf("%-4d%",arr[i]);printf("\n");   }

    • 指针法(指针变量):用指针变量指向数组元素

       #include <stdio.h>void main(){int arr[10];int *p, i;// 给数组元素赋值for(i = 0; i < 10; i++)scanf("%d",&arr[i]);// 遍历数组元素for(p = arr; p < (arr + 10); p++)printf("%-4d%",*p);printf("\n");   }

    注意:数组一旦创建,就无法改变其值

    以上三种写法比较:

    • 第种写法和第②种写法执行效率相同。系统是将arr[]转换为*(arr+i)处理的,即先计算出地址,因此比较费时。

    • 第③种方法比①②种方法快。用指针变量直接指向数组元素,不必每次都重新计算地址。(p++)能大大提高执行效率。

    • 用第①种写法比较直观,而用地址法或者指针变量的方法难以很快判断出当前处理的元素。

    使用指针变量指向数组元素时(上面第③种写法),注意以下三点:

    *(p--)相当于arr[i--],先*p,在p--*(p++)相当于arr[i++],先*p,在p++

    *(++p)相当于arr[++i],先++p,在**(--p)相当于arr[--i],先--p,在*

    *p++先*p,在p++

    (*p)++先*p,在*p++

    *p++ (p++) (*p)++

    具体关系参照下面表格

    数组名做函数参数

    表现形式:

    ①形参和实参都是数组名

     void fun(int arr[],int len){......}void main(){int arr[]={11,22,33};fun(arr,sizeof(arr)/sizeof(arr[0]));}

    ②实参用数组名,形参用指针变量

     void fun(int *p,int len){......}void main(){int arr[]={11,22,33};fun(p,sizeof(arr)/sizeof(arr[0]));}

    ③实参和形参都用指针变量

     void fun(int *p,int len){......}void main(){int arr[]={11,22,33};int *p=arr;fun(p,sizeof(arr)/sizeof(arr[0]));}

    ④实参用指针,形参用数组名

     void fun(int arr[],int len){......}void main(){int arr[]={11,22,33};int *p=arr;fun(p,sizeof(arr)/sizeof(arr[0]));}

    案例:

    需求:将数组a中n个元素

    分析:

    代码:

     #include <stdio.h>/*** 数组的反转:数组实现*/ void inv(int arr[], int len){// 反转思路:将第0个和len -1个进行对调,将第1个和len-2个进行对调...// 定义循环变量和临时变量register int i = 0, temp;// 遍历数组for(; i < len/2; i++){// 交换temp = arr[i];arr[i] = arr[len - 1 - i];arr[len - 1 - i] = temp;}}/*** 数组的反转:指针实现*/ void inv2(int *p, int len){// 反转思路:将第0个和len -1个进行对调,将第1个和len-2个进行对调...// 定义循环变量和临时变量int *i = p, *j = p + len - 1, temp;// 遍历数组for(; i < j;i++,j--){// 交换temp = *i;*i = *j;*j = temp;}}/*** 遍历数组*/ void list(const int arr[],int len)for(int i = 0; i < len; i++) printf("%-3d",arr[i]);printf("\n");}int main(int argc,char *argv[]){int arr[] = {11,22,33,44,55,66};int len = sizeof(arr) / sizeof(arr[0]);list(arr,len);inv(arr,len);list(arr,len);inv2(arr,len);list(arr,len);return 0;}​

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

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

相关文章

unityAB包(1/2)

unityAB包学习 1.AB包的导出扩展BuildAssetBundleOptions无特殊选项压缩相关选项 2.AB包资源管理3.Resource和AssetBundle加载方式的区别4.预设体5.Unity Asset Bundle Browser 工具5为什么要勾选拷贝到StreamingAsset里面。6.AB包的加载 1.AB包的导出 首先在Project窗口&…

某酒企数字化转型及电商规划项目启动会暨培训会v(60页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 在当今数字化浪潮席卷之下&#xff0c;企业的发展面临着前所未有的机遇与挑战。对于某酒企而言&#xff0c;数字化转型和电商规划已成为其实现 “二次腾飞”、迈向世界级酒企的关键战略举措。本次启动会暨培训会&#xff0c;为该酒企的转型…

NET6 WebApi第5讲:中间件(源码理解,俄罗斯套娃怎么来的?);Web 服务器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL

一、NET6的启动流程 区别&#xff1a; .NET6 WebApi第1讲&#xff1a;VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】_vscode webapi-CSDN博客 2、WebApplicationBuilder&#xff1a;是NET6引入的一个类&#xff0c;是建造者模式的典型应用 1>建造者模式的…

【AI】AI编程助手:Cursor、Codeium、GitHub Copilot、Roo Cline、Tabnine

文章目录 一、基本特性对比二、收费标准三、私有部署能力1、Tabnine2、Roo Code 三、代码补全与自然语言生成代码四、安装独立的IDE安装插件安装 五、基本使用&#xff08;一&#xff09;Cursor&#xff08;二&#xff09;GitHub Copilot1、获取代码建议2.聊天1&#xff09;上下…

三轴云台之角速度信号篇

三轴云台的角速度信号主要通过其内置的传感器&#xff08;如陀螺仪&#xff09;来感知和测量。 一、角速度信号的感知与测量 在三轴云台中&#xff0c;陀螺仪是测量角速度的关键组件。它通常安装在三个互相垂直的轴上&#xff08;通常为X、Y、Z轴&#xff09;&#xff0c;能够…

绿盟春招实习一面

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

进制转换(R转十)(1290. 二进制转换十进制、1292. 十六进制转十进制、1291. 八进制转十进制、1405. 小丽找潜在的素数)

题单地址&#xff1a;题单中心-东方博宜OJ 这里以二进制转十进制为例&#xff08;按位加权求和法&#xff09; 1290. 二进制转换十进制 问题描述 请将一个 25 位以内的 2 进制正整数转换为 1010 进制&#xff01; 输入 一个 25 位以内的二进制正整数。 输出 该数对应的…

9.嗅探与Wireshark进阶分析

嗅探与Wireshark进阶分析 第一部分&#xff1a;嗅探的概念与重要性第二部分&#xff1a;Wireshark进阶功能第三部分&#xff1a;嗅探实践与分析总结 目标&#xff1a; • 理解嗅探&#xff08;Sniffing&#xff09;的概念及其在网络安全中的作用 • 掌握Wireshark的进阶功能&a…

【Linux篇】进程控制

&#x1f4cc; 个人主页&#xff1a; 孙同学_ &#x1f527; 文章专栏&#xff1a;Liunx &#x1f4a1; 关注我&#xff0c;分享经验&#xff0c;助你少走弯路&#xff01; 1. 进程创建 1.1 fork函数 在linux中fork函数是非常重要的函数&#xff0c;它从已存在进程中创建一个…

HyperAD:学习弱监督音视频暴力检测在双曲空间中的方法

文章目录 速览摘要1. 引言2. 相关工作弱监督暴力检测双曲空间中的神经网络 3. 预备知识双曲几何切空间&#xff08;Tangent Space&#xff09;指数映射与对数映射&#xff08;Exponential and Logarithmic Maps&#xff09;3.1 双曲图卷积网络&#xff08;Hyperbolic Graph Con…

动态规划(6.不同路径II)

题目链接&#xff1a;63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; 本题为不同路径的变型&#xff0c;只不过有些地方有「障碍物」&#xff0c;只要在「状态转移」上稍加修改就可解决。 状态表示&#xff1a; 对于这种Γ路径类」的问题&#xf…

深度洞察:DeepSeek 驱动金融行业智能化转型变革

该文章为软件测评&#xff0c;不是广告&#xff01;&#xff01;&#xff01;&#xff01; 目录 一.金融行业的智能化转型浪潮​ 二.DeepSeek的核心技术剖析 1.DeepSeek 模型的金融智慧​ 2.实时联网搜索&#xff1a;把握金融市场脉搏​ 3.RAG 能力&#xff1a;铸就精准金…

蓝桥杯备考----》暴力枚举---金盏花

这道题&#xff0c;一共12位&#xff0c;给了后六位&#xff0c;我们只要枚举前六位就行了&#xff0c;当然如果是10的12次方的话&#xff0c;必须要开long long才可以存下&#xff0c;这点我们不要忘了 然后题目中又告诉了没有前导0&#xff0c;我们可以从100000开始枚举&…

RAG各类方法python源码解读与实践:利用Jupyter对RAG技术综合评测【3万字长文】

检索增强生成&#xff08;RAG &#xff09;是一种结合信息检索与生成模型的混合方法。它通过引入外部知识来提升语言模型的性能&#xff0c;从而提高回答的准确性和事实正确性。为了简单易学&#xff0c;不使用LangChain框架或FAISS向量数据库&#xff0c;而是利用Jupyter Note…

Python列表2

print("—————————— 列表的相关操作 ————————————")lst.append(x)在列表lst最后增加一个元素 lst.insert(index,x)在列表中第index位置增加一个元素 lst.clear()清除列表lst中所有元素 lst.pop(index)将列表lst中第index位置的元素取出&#xf…

C语言复习笔记--数组

今天继续来浅浅推进一下C语言的复习,这次是数组的复习,话不多说,正文开始. 数组的概念 数组是⼀组相同类型元素的集合,一种自定义类型.数组中元素个数不能为0.数组分为⼀维数组和多维数组&#xff0c;多维数组⼀般⽐较多⻅的是⼆维数组. 下面从一维数组说起. 一维数组的创建和…

Canal 解析与 Spring Boot 整合实战

一、Canal 简介 1.1 Canal 是什么&#xff1f; Canal 是阿里巴巴开源的一款基于 MySQL 数据库增量日志解析&#xff08;Binlog&#xff09;中间件&#xff0c;它模拟 MySQL 的从机&#xff08;Slave&#xff09;行为&#xff0c;监听 MySQL 主机的二进制日志&#xff08;Binl…

暗光增强技术研究进展与产品落地综合分析(2023-2025)

一、引言 暗光增强技术作为计算机视觉与移动影像领域的核心研究方向之一,近年来在算法创新、硬件适配及产品落地方面取得了显著进展。本文从技术研究与产业应用两个维度,系统梳理近三年(2023-2025)该领域的关键突破,并对比分析主流手机厂商的影像技术优劣势。 二、暗光增…

多维array和多维视图std::mdspan

多维数组 这个特性用于访问多维数组&#xff0c;之前C operator[] 只支持访问单个下标&#xff0c;无法访问多维数组。 因此要访问多维数组&#xff0c;以前的方式是&#xff1a; 重载operator()&#xff0c;于是能够以m(1, 2) 来访问第1 行第2 个元素。但这种方式容易和函数…

利用AI让数据可视化

1. 从问卷星上下载一份答题结果。 序号用户ID提交答卷时间所用时间来源来源详情来自IP总分1、《中华人民共和国电子商务法》正式实施的时间是&#xff08;&#xff09;。2、&#xff08;&#xff09;可以判断企业在行业中所处的地位。3、&#xff08;&#xff09;是指店铺内有…