C语言之联合(union)的妙用

超详细C语言联合体union详解 文章目录前言一、联合(共用体)定义二、联合的特点及运用三、联合的大小计算总结 前言 上一期C语言快速入门我们学习了枚举类型及相关知识点,这期我们来跟着笔者学习一下联合体相关知识,相信聪明的你一定会有所收获! 提示:以下是本篇文章正文内容,下面案例可供参考 一、联合(共用体)定义 联合是一种特殊的自定义类型,该种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间,所以联合体也被称为共用体。 代码如下(示例): #include<stdio.h> union Un//联合类型的声明. 阅读详情

相信学过C语言的程序员对C语言的各种数据类型都非常熟悉,像数组、结构体、结构体数组、结构体指针这些数据类型大家都会信手捏来。然而,有些数据类型被我们不经意的边缘化了。它们没有数组、结构体这些数据类型用的广泛,但是却不容忽视,例如,枚举、联合等。

  今天我们就讨论一下union(联合)这个数据类型。C语言的发明者为什么要弄一个这种不常用甚至几乎不用的数据类型呢。下面给你答案。首先,看一下union的定义。

union Data {
   int i;3    char str[4];
} data; 

这段代码定义了一个名为data的union变量。它有什么属性呢?

  1. 这个变量在内存中占用4个字节的空间而不是8个;
  2. 有两个数据成员:int类型变量的i和char类型的数组str;
  3. 虽然有两个数据成员,但是这两个成员的存储空间是一样的。

上面三点是union变量的最基本也是最重要的属性。详细说一下第三点。因为union不论包含多少个多少种数据类型,它实例化为变量后,这个变量的长度是这个union中最长的数据类型的长度。下面的代码定义了一个union变量。它的长度是16个字节。

 union DEMO{ 
     char status;
     int a; 
     int serial[4]; 
}demo;

     MSB                                                                                                             LSB

0fedcba987654321

上面这个表格代表内存中的数据,demo.status 的值为0x1;demo.a的值为,0x4321。以此类推demo.serial的值就出来了。这个属性是union特有的,C语言的发明者为什么要弄这么个数据类型呢?现在知道了吧。因为这个union特有的属性可以帮助我们节省好多行代码。而且还不用各种基础数据类型转换。

  union的应用

  设想用C语言实现这样一个功能。我需要用单片机读取一个监控温度的i2c slave的寄存器数据。这个寄存器是12位有效位寄存器。读出来之后我们要通过数据手册给定的公式计算成实际温度(设想这个公式为 temp = reg_val *10)。我们怎么实现呢?要知道,i2c的数据传输是按照byte传送的,也就是说,你只能用char类型结束数据,说白了,每个时序你只能接收8个bit的数据。所以12个bit需要读两次,用两个char类型变量或一个char类型数据接收。

  1. 读出寄存器数据(这个不在这篇文章的讨论范围内)
  2. 将读出的数据转换成可计算的数据类型(两个char类型转换成一个short或int或float类型)
  3. 根据公式计算

下面看一下不用union实现的函数

int fun( void )
{
    int tmp_value = 0; 
    char reg_val[2] = {0,0}; 
     .... 
    i2c.read(addr<<1, reg_val, 2); 
    tmp_value = (reg_val[1]<<8 | reg_val[0]); 

    return tmp_value*10; 
}

用union的

union REG_VAL { 
    int value; 
    char buf[2]; 
}reg_val; 

int fun( void )
{ 
    int tmp_value = 0; 
    char reg_val[2] = {0,0}; 
    .... 
    i2c.read(addr<<1, reg_val.buf, 2);

    return reg_val.value*10; 
}

不用union的函数也可以用sprintf实现,那就更麻烦了。

  可以看到虽然在这里用union的代码比不用union的多了几行,但是i2c sensor如果多的话,那就会少很多,而且i2c sensor的寄存器有效位数不是一样的,这个用两个char类型就解决了,但是其他的可能需要用三个,所以用最上面定义的union变量可以很好的实现,不需要考虑各种转换问题。

  union还是很有用处的,所以不要忽视它了。

 ps:原创不易,转载请注明出处

C++中的联合(Union):灵活存储多类型数据的利器 联合是一种特殊的数据结构,它允许在相同的内存空间中存储多种不同类型的成员。不同于结构体(Struct),联合的成员共享同一块内存空间。这意味着在给一个联合变量赋值时,只能使用其中的一个成员。int i;float f;char c;在上述示例中,MyUnion是一个联合类型,它包含了intfloat和char三个成员。这三个成员共享同一块内存空间,即改变其中一个成员的值会影响其他成员的值。 阅读详情

相关推荐

C 语言中的联合(Union)的用途是什么?

带你畅游技术世界,不错过每一次成长机会!通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代,看过的人都说好。

技术笔记 2307

C语言-联合体union

C语言-联合体union

让你爱上电路设计 3万+

【C语言】union 关键字详解

union关键字在C语言中用于定义联合体,允许不同的数据类型共享同一段内存。联合体的大小由其最大成员的大小决定。联合体在节省内存和类型转换等场景中非常有用。

LuckiBit 4827

【C语言】Union

union 共用体名{成员列表union,“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。

t5y22的博客 2646

【C语言】联合体 `union` 的妙用

在 C 语言中,联合体(`union`)是一种独特的复合数据类型,因其内存共享特性而在内存优化、类型切换和底层操作中展现出妙用。与结构体(`struct`)不同,联合体允许同一块内存存储不同类型的数据,提供高效且灵活的解决方案。访问联合体成员时,`.` 和 `->` 操作符是核心工具,而 `typedef` 则为联合体的使用增添了简洁性和可移植性。本文将从基础概念讲起,深入探讨联合体的妙用场景,并详细剖析 `.` 和 `->` 的用法与对比,最后结合 `typedef` 提供一个综合示例。

LuckiBit 640

【嵌入式面试题】C语言union(联合体)的使用总结

与struct用法非常类似,不过其适用于不同时被用到的数据 注意: 1. 大小端模式对 union 类型数据的影响(51是大端,一般处理器都是小端) union { int i; char a[2]; }*p, u; p = &u; p->a[0] = 0x39; p->a[1] = 0x38; p.i 的值应该为多少呢? 这里需要考虑存储模式:大端模式和小端模式。 大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则

CodeAllen嵌入式 4万+

C/C++语言中联合体union的妙用

联合体union的基本概念 在C/C++语言中,有时需要在同一段内存单元中存放不同类型的变量,如把一个整形变量int、一个字符型变量char和一个双精度实型变量double放在同一个地址开始的内存单元中,这3个变量虽然在内存中占的字节数不同,但都从同一地址开始,使用覆盖技术,后一个数据覆盖了前面的数据。这便是联合体union(或者叫共用体)诞生的目的所在。其主要特点是: union中可以定义多...

Qsir的专栏 2174

【华为鸿蒙3.0/荣耀安卓12使用VMOS Pro的激活方式】

解压激活工具 →连接数据线 轻松搞定激活!

Amy_mumu的博客 142万+

c语言联合有什么好处,C语言中联合体union妙用

struct,union,enum 这三种是C语言中常见的自定义数据类型。struct是用于不同或相同数据类型的整合,整合成最终的struct类型数据。union是用于将不同类型数据存放与一处内存地址的方法。enum是一个被命名的整型常数的集合,里面的所有数据都是整型。关于union的一处妙用(百度百科中):联合体在单片机中的应用单片机中经常会遇见分离高低字节的操作,比如进行计时中断复位操作时往往...

weixin_39584571的博客 406

【NAS for PVE _04】安装TrueNAS

前篇说到如何调试 Proxmox VE 8.2 为安装虚拟机做准备,本篇主要讲述如何在 Proxmox VE 上安装 TrueNAS 系统,并开启NFS供其他系统挂载使用官网下载好TrueNAS系统镜像。

村口王师傅。 6143

麒麟V10 SP3国产化环境部署MySQL 8.0全流程实战

本文详细介绍了在国产化操作系统麒麟V10 SP3上部署MySQL 8.0的全流程实战指南。从环境准备、冲突排查到安装包处理、服务配置与安全加固,提供了详细的命令和技巧,帮助用户顺利完成MySQL 8.0的部署与优化,适用于国产化环境下的数据库应用。

weixin_29231027的博客 266

C语言中联合体union妙用

转载地址:http://baike.baidu.com/link?url=CBYvjfYPlaYPkuf__0T4JwiyejkhAYnhdkA7g8azkOcj0deByrkwlXQW39jOZzvYh_7LracSV5enJjPNRnrkI_ struct,union,enum 这三种是C语言中常见的自定义数据类型。 struct是用于不同或相同数据类型的整合,整合成最终的struct类型

hot__rain的博客 7502

解决用VScode写中文注释,Vivado打开之后是乱码的方法

这样就解决了中文注释乱码的问题,此外如果使用notepad++写verilog代码的话直接在notepad++上面将编码格式改为ANSI格式即可,更加方便快捷,所以此方法仅针对习惯用VScode写Verilog的同学,如果有其他好办法的话欢迎评论区补充。首先,VScode中的中文默认编码格式是UTF-8,然后Vivado的编码格式是vivado 默认的应该是ANSI编码格式,刚开始我先按照网上说明的,将VScode中的编码格式改为GBK格式(点击右下角->点击通过编码保存)。

weixin_50573305的博客 5809

联合体,结构体妙用法

联合体,结构体妙用法(摘自:ZhengNL嵌入式大杂烩) 在C语言中定义联合体的关键字是union 定义一个联合类型的一般形式为: union联合名 { 成员表 }; 实用技巧 1:示例代码: enumDATA_PKG_TYPE { DATA_PKG1=1, DATA_PKG2, DATA_PKG3 }; structdata_pkg1 { //... }; structdata_pkg2 { //... }; structda...

u014428915的博客 563

AD服务器搭建

一、角色安装1)打开服务器管理器,添加 角色和功能;2) 点 下一步;3)点 下一步;4)点 下一步;5)点击安装;6-1)将此服务器提升为域控制器;6-2)点下一步;6)输入密码 点 下一步;7)自动生成LIXF,点击下一步;8)确认目录,点下一步;8)确认安装条件,点安装; 8)安装成功,点关闭;...

潇峰的博客 6444

从宏观到街道:如何利用七普数据为WorldPop人口栅格做“本地化”校准?

本文探讨了如何利用第七次全国人口普查(七普)数据对WorldPop人口栅格进行本地化校准,以提高街道级别的人口分布精度。通过分析数据偏差、选择适当的技术路线和工具(如Arcgis和栅格计算器),文章详细介绍了从宏观到街道的校准实践,帮助规划公共卫生资源和优化城市基础设施。

janckywong963的专栏 511

C语言联合体union详解

该种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间,所以联合体也被称为共用体。

m0_53263647的博客 1万+

手把手教你学simulink(36.1)--ACAC变换器场景示例:基于 Simulink 的矩阵变换器(Matrix Converter)

矩阵变换器(Matrix Converter, MC)是一种直接将交流电(AC)转换为不同频率和幅值的交流电的电力电子设备。与传统的基于直流环节的变频器不同,矩阵变换器不需要中间的直流环节,而是通过双向开关直接在输入和输出之间进行能量传递。这种结构使得矩阵变换器具有更高的效率、更小的体积和更好的动态响应。在本项目中,我们将使用 MATLAB/Simulink 来建模和仿真一个矩阵变换器,并分析其性能。Simulink 是一个强大的仿真工具,特别适合用于电力电子系统的建模和仿真。

MHD0815的博客 1065

C语言中的union联合变量是什么意思

什么是联合变量 c语言中的union 是联合体,就是一个多个变量的结构同时使用一块内存区域,区域的取值大小为该结构中长度最大的变量的值 联合的定义 定义一个联合类型的一般形式为: union 联合名 { 成员表 }; 成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名 。成员名的命名应符合标识符的规定。例如: union perdata { int class; ...

czdyhh的博客 3777

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C语言联合 union(声明,差异,应用)

带图带实例讲解

mrchuizi的博客 2293

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C语言中联合体union的使用

一、前言     最近在准备考研的专业课中,遇到了C语言的联合体,在此总结一下。 二、简介     联合体union和结构体struct有一些相似之处,但两者本质上不同,在结构体中,各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和。而在联合体中,各成员共享一段内存空间,一个联合变量的长度等于各成员中的最大长度。应该说明的是,这里所谓的共享不是指把多个成员同时装入一个联合变

颗粒归仓 1687

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C语言联合体(union)

一、C语言联合体(union) 1. 概念:联合体里面所有成员都共用一块内存,使用时候,所有成员属性选一个。 2. 定义 -定义联合体数据类型 union sorce { int a; char b; short c; } 定义联合体变量 union a aaa; -访问联合体的成员 aaa.a = 5 联合体内存分分配原理如图所示 所以成员变量中char类型数据只占其中的一个字节,short类型数据只占其中的两个字节。 二、利用联合体可以判断主机的大小端序 大端序:数据

weixin_37552254的博客 2826

C语言之联合(union)

  在c语言中,学会使用联合(union)来进行程序设计是一个很重要的技能,同时,在阅读许多优秀源码时,也会看见联合的身影。于是乎,寻求了许多资料 ,将其一些相关知识总结在下面了。   一、什么是联合(union)?    联合(union)是一种数据类型,特点是:     (1)能在同一个存储空间中储存不同的数据类型(注意不是同时存储)   (2)联合只能储存一个值,这一点与结构...

weixin_30709635的博客 614

C语言联合体union占用空间大小问题

联合体占用空间大小要遵循两个原则: 1. 大小要足够容纳下所有成员的大小,也就是找到占用空间最大的元素 2. 占用空间最大的元素大小要可以被所有共用体成员类型整除开 3. 如果元素大小不可以被共用体某一个成员的类似整除开,必须添加空白自己,直到可以被共用体所有成员类型整除开。

weixin_48435215的博客 7798

union在c语言中的作用,C语言小结——联合体(union)使用方法及其本质

C语言总结——联合体(union)使用方法及其本质有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判断,温故知新。1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体(stru...

weixin_30611317的博客 2004
debugzzj
博客等级 码龄10年 6粉丝 1原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值