完全自学C(干货) —— 数据的存储

最权威的存储自学书籍-大话存储2 张东,大话存储电子书,真正从存储门外汉到精通者 立即下载

目录

一,类型的基本归类

二,大小端

三,整型在内存中的存储

四,浮点类型在内存中的存储


  • 数据已知类型有
    • 内置类型(char,int,float,double等);
    • 构造类型(数组、结构体、枚举、联合);
    • 指针类型;
    • 空类型(void);
  • 数据类型的作用,开辟及访问内存大小;

一,类型的基本归类

  • 整型家族(unsigned、signed)
  • 浮点家族(float、double)
  • 构造类型(arry、struct、enum、union)
  • 指针类型
  • 空类型(void)
//整型家族
//char
	unsigned char 
	signed 

//short [int]表示可省略
	unsigned short[int] 
	signed short[int] 

//int
	unsigned int
	signed int

//long
	unsigned long[int] 
	signed long[int] 
//浮点家族
    float
    double
//构造类型
    数组类型
    结构体类型 struct
    枚举类型 enum
    联合类型 union
//指针类型
    char* p
    int* p
    float* p 
    void* p
    ...等
//空类型
//通常作为函数的返回类型、函数的参数、指针类型
    void 表示无类型
    void test(void)

二,大小端

大小大于一个字节时,就会存在多个字节安排排序的问题;

  • 大小端,即数据内存存储的地址顺序;
  • 大端(大端字节序),值数据的低位保存在内存的高地址中,而数据的高位保存内存的低地址;
  • 小端(小端字节序),值数据的低位保存在内存的低地址中,而数据的高位保存内存的高地址;
int checkSystem()
{
	int num = 1;
	//小端内存存储顺序应为 01 00 00 00
	//大端内存存储顺序应为 00 00 00 01
	char* p = # //解引用时会仅访问1个字节
	return *p;
}
int main()
{
	if (checkSystem())
		printf("小端");
	else
		printf("大端");
}
//结果:小端
//visual studio 2019为小端编译器

三,整型在内存中的存储

  • 创建变量,即会在内存中开辟空间;
  • 空间大小,由数据类型决定;

有符号整数(signed)

  • 符号位(0/1) + 数值位组成;
  • 数据在内存中存放的是二进制补码;
  • 正整数,原码、反码、补码相同;

有三种二进制形式(原码、反码、补码):

  • 原码,直接按照正负数直接翻译成的二进制;
  • 反码,在原码基础上符号位不变,其余取反;
  • 补码,原码转化为反码 + 1;
int main()
{
	//正整数,原码、反码、补码相同
	int a = 10;
	//0000 0000 0000 0000 0000 0000 0000 1010 内存补码形式
	//0a 00 00 00 小端十六进制形式

	//负整数
	int b = -10;
	//1000 0000 0000 0000 0000 0000 0000 1010 原码
	//1111 1111 1111 1111 1111 1111 1111 0101 反码
	//1111 1111 1111 1111 1111 1111 1111 0110 补码,反码+1
	//f6 ff ff ff 小端十六进制形式
}


使用原反补码原因:

  • 计算机中,整数数值一律用补码来表示和存储;
  • 使用补码可将符号位和数值域统一处理(即运算);
  • 使得加减法也可统一处理(CPU只有加法器);
  • 此为补码和原码相互转换其运算过程是相同的,无需额外的硬件电路;
    • 可将补码取反+1得到原码;

注:先翻译为补码运算,再还原为原码输出;

补充:

  • char,是signed还是unsigned取决于编译器;
  • int,即是signed int;
  • short,即是signed short;

注:头文件limts.h,可查看取值范围;

//16进制书写,即补码
int a = 0xffffffff; //-1
unsigned int b = 0xffffffff; //4294967295

字符char类型

  • 有符号char类型,取值范围为 -128 ~ 127(有符号1000 0000直接翻译为-128);
  • 无符号char类型,取值范围为 0 ~ 255;
  • char类型超过取值范围,会扣除256,循环取值,即正向越界-256,负向越界+256;

int main()
{
	//有符号char类型,-128~127
	char a = 200; //实际存储-56
	char b = -200; //实际存储56

	//无符号char类型,0-255
	unsigned char c = 200; //实际存储200
	unsigned char d = -200; //实际存储56

	printf("%d %d %d %d\n", a, b, c, d);
}
int main()
{
	//逻辑顺序为,先将值存入变量内,考虑是否截断
	//在将变量的补码元素,此时需考虑整型提升问题
	//计算的结果补码,看是否需要转换为原码

	char a = 128; //其实a实际值为-128,因为值已越界
	char b = 5;
	printf("%d %u", a + b, a + b); 
	//1000 0000 a补码
	//0000 0101 b补码 
	
	//a+b,先需整型提升
	//1111 1111 1111 1111 1111 1111 1000 0000 a提升后补码
	//0000 0000 0000 0000 0000 0000 0000 0101 b提升后补码
	//1111 1111 1111 1111 1111 1111 1000 0101 a+b后补码 

	//%d为有符号整数,需按规则转换为原码
	//1111 1111 1111 1111 1111 1111 1000 0100 反码
	//1000 0000 0000 0000 0000 0000 0111 1011 原码,-123

	//%u表示无符号整数,原反补相同,无需转换
	//1111 1111 1111 1111 1111 1111 1000 0101 补码,4,294,967,173
}
//结果:-123 4294967173

注:运算时涉及整形提升或算术转换

四,浮点类型在内存中的存储

头文件float.h,可查看取值范围;

浮点类型的数据存储,使用另外一种方式,与整型数据存储完全不一样;

int main()
{
	int a = 10;
	//0a 00 00 00 a内存十六进制补码形式

	float b = 10;
	//00 00 20 41 b内存十六进制补码形式

	printf("%d %f", a, b); //结果:10 10.000000
}
//同样值,内存存储的形式完全不一样

浮点型内存存储规则

根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式:

  • (-1)^S * M * 2^E
  • (-1)^S,表示符号位0、1;
  • M,表示有效数字,大于等于1,小于2;
  • 2^E,表示指数位,即使用科学计数法移位的值;
float a = 10;
//十进制10的二进制为1010,按照规则(-1)^0 * 1.010 * 2^3
//S = 0
//M = 1.010
//E = 3

float b = -5;
//十进制-5的二进制为101,按照规则(-1)^1 * 1.01 * 2^2
//S = 1
//M = 1.01
//E = 2

float c = -0.5;
//十进制-0.5的二进制可类似为-0.101,按照规则(-1)^1 * 1.01 * 2^-1
//S = 1
//M = 1.01
//E = -1

S,M,E内存中的分布

  • IEEE754规定,32位浮点数,S(1位),E(8位),M(23位)
  • IEEE754规定,64位浮点数,S(1位),E(11位),M(52位);

M (1<=M<2),有特别规定:

  • 规定需写为1.******,但默认首位1省去,只写小数点后的部分;
  • 读取的时候在添加上1,这样可保存24位有效数字(32位存储);

E (unsigned int,为无符号数)

  • 在32位存储为8位,则取值范围为0-255;
  • 在64位存储为11位,则取值范围为0-2047;
  • 因为E可能会取到负数,所以实际上规定要加个中间数,即+127或+1023;
//32位存储
float a = 10;
//十进制10的二进制为1010,按照规则(-1)^0 * 1.010 * 2^3
//S = 0
//M = 1.010 -> 0100 0000 0000 0000 0000 000 (去除1,从前向后排放,不足补零)
//E = 3     -> 1000 0010 (加127,130)

//0100 0001 0010 0000 0000 0000 0000 0000 (最后实际存储的内存形式)
//41 20 00 00 
//00 00 20 41 小端内存十六进制形式

float b = -5;
//十进制5的二进制为101,按照规则(-1)^1 * 1.01 * 2^2
//S = 1
//M = 1.01 -> 0100 0000 0000 0000 0000 000 (去除1,从前向后排放,不足补零)
//E = 2    -> 1000 0001 (加127,129)

//1100 0000 1010 0000 0000 0000 0000 0000 (最后实际存储的内存形式)
//c0 a0 00 00 
//00 00 a0 c0 小端内存十六进制形式

float c = -0.5;
//十进制0.5的二进制可类似为0.1(二进制11相对于1*2^1+1*2^0=3, 0.1相对于1*2^-1=0.5)
//按照规则(-1)^1 * 1.0 * 2^-1
//S = 1
//M = 1.0 -> 0000 0000 0000 0000 0000 000 (去除1,从前向后排放,不足补零)
//E = -1   -> 0111 1110 (加127,126)

//1011 1111 0000 0000 0000 0000 0000 0000 (最后实际存储的内存形式)
//bf 00 00 00 
//00 00 00 bf 小端内存十六进制形式

float d = 0.75;
//十进制0.75的二进制可类似为0.11(二进制11相对于1*2^1+1*2^0=3, 0.11相对于1*2^-1+1*2^-2=0.75)
//按照规则(-1)^0 * 1.1 * 2^-1
//S = 1
//M = 1.1 -> 1000 0000 0000 0000 0000 000 (去除1,从前向后排放,不足补零)
//E = -1   -> 0111 1110 (加127,126)

//0011 1111 0100 0000 0000 0000 0000 0000 (最后实际存储的内存形式)
//3f 40 00 00 
//00 00 40 3f 小端内存十六进制形式

浮点型内存还原规则

注:32位为例,二进制内存形式,还原为十进制数值时

  • 首位S符号位
  • 其后8位,-127为E
  • 最后23位,补1为M

E还原时有三种情况

  • 一般情况下,E不全为0或1:
    • E-127(或E-1023);
    • M要在首位添加1;
  • E全为0时,即+127后仍为0(原2^-127):
    • E=1-127(或1-1023),不在是0-127(或0-1023);
    • 且M的有效数字不再加1;
    • +/- 0.******的小数,这样做是为了表示±0,其实就是接近于0的很小的数字;
  • E全为1时,即+127后为255(原2^128):
    • E=255-127=128;
    • +/- 1.******,如有效数字M全为0,表示±无穷大(正负取决于符号位s);

〖进阶篇1〗YAML参数解析:从nav2_params.yaml看机器人导航调优 本文深入解析了ROS2 Nav2导航系统中关键的nav2_params.yaml文件,提供了从定位、行为树、运动控制到环境感知等核心模块的参数调优实战指南。文章通过具体场景案例,如狭窄走廊、动态仓库和高精度对接,详细阐述了如何调整AMCL粒子数、控制器权重、代价地图膨胀半径等参数,以解决机器人导航中的犹豫、碰撞和精度问题,帮助开发者实现从“能用”到“好用”的进阶。 阅读详情

相关推荐

数据结构:五岔路口交通管理红绿灯设计

我们可以知道这是一个“图”的着色问题,首先要考虑,为什么可行路线是13条?当然可以通过穷举得出,如果用公式:则是: 或者 因为一条路线必须包括一出一进两个方向 第一种答案的解法: 一、固定E为入口,则有C_4^1=4的可能; 二、除去E(因为E只有一个入向),剩下ABCD四个路口,然后因为C只有一个出方向,所以从剩下 的ABD中选择一个入口,即C_3^1; 三、再从剩下的三个出口任选

潘猫猫的世界 1万+

【C语言搭建数据库】Part05 - 持久化存储数据库

这部分将实现数据库的持久存储,文章原地址:https://cstack.github.io/db_tutorial/parts/part5.html我们的数据库能插入记录并读回记录,但前提是保持程序运行。如果你终止了程序并重新启动它,那所有存储的记录都将小时。就像sqlite一样,我们通过把整个数据库保存到文件中来持久化数据。我们已经通过把行序列化为页大小的内存块来做到这一点。为了进一步提高数据的持久性,我们可以简单地把这些内存块写入文件中, 并在下次启动程序是把它们读回内存中。

ZhangzrJerry的博客 480

Python自动化测试全套教程-第一天(python、pycharm开发环境的安装与配置(图文超级详细);附安装包)

本文介绍了Python开发环境的完整安装配置流程。主要内容包括:1) Python解释器的下载安装与版本检测方法;2) PyCharm IDE的下载安装步骤,包括专业版和社区版的选择;3) PyCharm的基础配置和项目创建方法;4) 开发环境的基本构造说明。文章提供了两种获取安装包的方式(官网下载和文章附件),并详细说明了解释器卸载、安装过程中的注意事项,以及如何验证环境配置成功。特别强调了PyCharm安装时的路径选择和虚拟环境的创建方法,为Python初学者提供了完整的开发环境搭建指南。

kiwi_king的博客 2035

用c语言写一个实时的存储分数的程序

我可以为您提供一个简单的示例,以便您可以开始编写实时存储分数的程序:#include <stdio.h> int main() { int score; printf("请输入分数:"); scanf("%d", &score); if(score >= 90) printf("A\n"); else if(score >= 80 &...

weixin_35756637的博客 218

RTC 实时时钟实验

如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) // 往备份区域写用户数据的函数 (这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的)存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。寄存器操作完成,并同步之后,设置秒钟中断。

m0_55996456的博客 1205

【通信原理 入坑之路】—— 详解IQ调制以及星座图原理

文章目录一. IQ调制与解调的原理与过程二.PSK(相移键控)和IQ调制的关系:2.1 用IQ调制实现QPSK调制 一. IQ调制与解调的原理与过程 IQ调制的定义是:“IQ调制就是数据分为两路,分别进行载波调制,两路载波相互正交。I是in-phase(同相), q是 quadrature(正交)” 我们通过下面的示意图介绍IQ调制的过程: 首先,信号分成两路:I路和Q路(为了方便理解我们把这两...

凝望,划过星空的博客 11万+

学习数据存储

学习鹏哥C语言

Williamtym的博客 257

从零搭建《火影忍者》手游服务端:Linux环境部署与全流程实战

游戏服务器后端开发是构建大型多人在线体验的核心技术,其原理涉及高并发网络通信、分布式系统架构与数据一致性保障。在技术价值上,一套稳定高效的服务端不仅能支撑海量玩家实时交互,更是游戏业务逻辑、经济系统和安全防线的基石。典型的应用场景包括MMORPG、回合制卡牌、SLG等中重度手游。本文以《火影忍者》IP的横版卡牌回合制手游为例,聚焦于**手工服务端**的完整搭建过程,详细拆解从Linux系统初始化、MySQL与**Redis**缓存部署、核心服务编译、到代理后台联调的全链路实践,为开发者深入理解游戏后端架构提

weixin_30800615的博客 337

教你如何学习数据存储

数据在内存中的存储 明确变量类型对于数据存储的意义: 类型决定开辟内存空间的大小。 决定如何看待二进制序列在内存中的存储方式。(比如Int,和float的存储方式就不一样,将int直接输出为float时会发现输出大不相同的情况) 整型在内存中的存储 例如 int a=-20; 存 先看赋值操作符右边,将对应数字化为对应二进制序列(符号位),然后化为对应补码形式。 看变量类型->开辟了多大空间,然后将二进制序列补码按字节放入对应空间中。 取 取即读取,此时需要先看变量类型,如果是整型且未

GO20201205的博客 320

Python金融数据获取工具库之baostock使用详解

在金融数据分析和量化交易中,获取准确及时的市场数据是非常重要的。baostock是一个专门为中国股市数据提供支持的 Python 库,它提供了免费的股票数据接口,用户可以方便地获取股票、指数、基金等各种金融数据。本文将详细介绍baostock库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。

Rocky006的博客 5344

2022年全国职业院校技能大赛 高职组大数据技术与应用卷⑦——解析答案

大数据时代,电商经营模式发生很大改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。商家可以对客户的消费行为信息数据进行收集和整理,比如消费者购买产品的花费、选择产品的渠道、偏好产品的类型、产品回购周期、购买产品的目的、消费者家庭背景、工作和生活环境、个人消费观和价值观等。通过数据追踪,知道顾客从哪儿来,是看了某网站投放的广告还是通过朋友推荐链接,是新访客还是

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 471

完全自学C(干货) —— 数组

一组相同类型元素的集合,可存储一系列相同类型的数据;

NapoleonCoder的博客 1154

【毕业设计】基于雷达与深度学习的摔倒检测——雷达数据集的建立

运动物体的微多普勒效应为人体动作识别提供了可能,基于雷达的居家检测具有良好的隐私保护性,且不易受环境因素影响(如光照、温度等),近年来已受到国内外学者的广泛关注。基于雷达与深度学习的摔倒检测使用自建的雷达数据集进行人体摔倒检测的研究。雷达数据集的建立分为雷达数据采集和雷达数据处理两部分工作。

洋洋Young的博客 3403

完全自学C(干货) —— 结构体初识

是一些值的集合,这些值被称为成员变量;

NapoleonCoder的博客 344

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

自学C语言的五大误区:为什么有人3个月放弃,有人却能成为高手?

C语言作为一门经典且强大的编程语言,在系统软件、嵌入式开发、游戏开发等众多领域都有着广泛的应用。许多人怀揣着对编程的热情踏上了自学C语言的道路,但结果却大相径庭:有的人在短短3个月内就选择放弃,而有的人则能逐渐成长为编程高手。造成这种差异的原因,很大程度上在于是否陷入了自学的误区。本文将为你揭示自学C语言的五大误区,帮助你避开陷阱,更高效地学习C语言。

星辰夜语的博客 1108

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

完全自学C(干货) —— 关键字

关键字;

NapoleonCoder的博客 311

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

完全自学C(干货) —— 指针初识

指针即内存地址(编号);

NapoleonCoder的博客 356

从内存视角看C语言数据存储

你是否想过,-123 在内存里为什么是 0xFFFFFF85?-12.125 又为什么变成了 0xC1420000?本文从内存视角拆解 C 语言整数补码与 IEEE 754 浮点数存储机制,通过代码验证小端模式内存布局,揭示字符与 ASCII 码的转换技巧(如异或 32 实现大小写转换),并指出浮点数比较必须用误差阈值而非 == 判断——这对嵌入式开发尤为重要。结合内存实例,帮你彻底搞懂底层数据存储原理。

2401_89245836的博客 543

好程序员分享自学大数据入门干货

  首先,提及大数据一词的概念。大数据本质还在于数据,但是它有着新的特征亮点。包括:数据来源广,数据格式多样化(结构化数据、非结构化数据、Excel文件、文本文件等)、数据量大(最少也是TB级别的、甚至可能是PB级别)、数据...

cique2620的博客 70

自学go语言的笔记干货

在经过3个月的Go的学习中 整理出来的比较 感觉还拿得出手。 文档资料:http://yuancao.meicx.com/d/34 书签网:https://www.bookstack.cn/ 格式化: gofmt -w hello.go 编译*指令: go build -o 123.exe main.go go build xxx.go 输入输出fmt: var name string fmt.Println("请输入姓名") //输出 fmt.Scanln(&name).

u011620855的博客 670

初学者自学python哪本书好,自学python怎么入门

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)

2301_81900386的博客 739

C语言自学保姆教程——第一节--编译准备与第一个C程序

致初学者 首先,祝贺你非常有眼光,选择C语言。从语言的流传度来说,C语言、C++和JAVA在每年语言使用在1000多种计算机语言中稳居前三。而C又是一门底层语言,却兼具高级语言和低级语言的特性,执行效率高,而且应用广泛,据说,两大操作系统--Windows和Linux 都是用C写成的。每年,因闻C的大名而慕名前来学习的人数不胜数。可是,想要将其学好,还是需要下一定的功夫的。而在C学好之后,我们可以学C++或者JAVA就易如反掌了,同时,你也掌握了一门编程语言,在未来学习数据结构和算法、数据库、Linux操

jxwd的博客 1471

一文彻底搞懂数据结构(写出初学者的干货)

数据结构是计算机专业的基础课程,是所有程序员的必修课。如果把编程语言比作程序员的剑法招式,那么数据结构就是程序员的内功心法。不懂数据结构就是写代码的农民,了解数据结构才能成为行业专家。这些问题的答案,在我原创的这篇文章中都能找到。在这篇文章中,我不会深入讲解数据结构中的某个知识点,而是要揭开数据结构的面纱,让大家从整体上对数据结构有一个清晰的认知,致力于帮助读者快速入门数据结构。数据结构与算法教程,数据结构C语言版教程!

数据结构和算法教程(C语言版) 2703

python归档excel数据_python 数据存储excel

Python的小数据存储,用什么格式更有逼格?小数据存储我们在编写代码的时候,经常会涉及到数据存储的情况,如果是爬虫得到的大数据,我们会选择使用数据库,或者excel存储。但如果只是一些小数据,或者说关联性较强且存在存储后复用的数据,我们该如何存储呢?使用open保存文本最简单、粗暴+无脑的存储方式就是保存成一个文本文档了。使用open...文章云栖公开课2019-11-281342浏览量一位数据...

weixin_32558567的博客 591

振南技术干货集:振南当年入门C语言和单片机的那些事儿(4)

我们已经知道了CPU如何通过总线进行存储器的读写,也知道地址总线的宽度决定了CPU的寻址空间,数据总线的宽度则决定了CPU的位数(单次能够读写的数据量),而控制总线在一定程度上影响了访存的速度(WR与RD为0的时间越短,访存速度越快,当然也要存储器速度跟得上才行)。这个接口的读写是符合CPU总线时序的,所以它可以直接挂接在CPU总线上,与存储器、其他外设并存(但是分属于不同的地址区间,CPU向这些地址读写数据将对应于外设电路的不同功能)。更形象的说明请看图 1.16。它是由很多的地址连续的存储单元构成的。

小超嵌入式笔记 314

0基础C语言自学教程——第七节 初始指针

写在前面: 各位小伙伴还在为C语言的学习而苦恼嘛? 还在为没有知识体系而烦心嘛? 别急。因为~~~~ 接下来的时间里,我会持续推出C语言的有关知识内容。 都是满满的干货,从零基础开始哦~,循序渐进????,直至将C中知识基本全部学完????。 欢迎关注我♥,订阅专栏 0基础C语言保姆教学, 就可以持续读到我的文章啦????????~~~~ 本文为第7节——初始指针(文末附前6章的链接呦????) 预告:本节我们知识指针热身,在下一节,我们会详详细细、大张旗鼓地介绍指针、函数和数组之间的

jxwd的博客 739
上一篇: 完全自学C(干货) —— 调试
下一篇: 完全自学C(干货) —— 指针进阶
挨代码
博客等级 码龄5年 1696粉丝 384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值