函数参数传递 “指针的指针” (或是指针的引用)

关于指针作为函数参数传递的理解 本来已经把指针和引用的知识都捋清楚了,但是中午编程遇到了一个传递数组的问题,一下想得多了点,然后又。。。。 被值传递,指针传递,引用传递,地址传递这几个概念弄晕了。看了十来篇博客,什么说法都有。参考课本和菜鸟教程还有一些优秀博客上的观点,加上自己实操,得出下面一些自己对指针传递的理解。 以下是本人粗浅理解,不知是否表述清晰,若有疑问或高见,请在评论区留言指正。 见代码: ... 阅读详情

注:以下讨论都是在ARC模式下

我们在iOS开发中最经常碰到的“引用(reference)”的使用是在error上,比如如下代码

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSError *error = nil;  
  2. BOOL success = [myContext save:&error];  
  3. if (!success) {  
  4.   [NSApp presentError:error];  
  5.   return;  
  6. }  

 

这里的save方法实现大概是这样子

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. - (BOOL)save:(NSError **)error  
  2. {  
  3.   ...  
  4.    
  5.   //假设出现了错误  
  6.   if (YES) {  
  7.     //An error occurred  
  8.     NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary];  
  9.     [errorDetail setValue:@"Failed to do something wicked" forKey:NSLocalizedDescriptionKey];  
  10.     *error = [NSError errorWithDomain:@"myDomain" code:100 userInfo:errorDetail];  
  11.     return NO;  
  12.   }  
  13.   return YES;  
  14. }  

下面来说一下需要注意的地方

1.可以注意到传递参数用的是&error,并且接收参数用的是(NSError **)。

其中&error指的是传这个变量的“引用”,即传变量的地址。(NSError **)其实是(NSError * __autoreleasing *)的缩写,指的是引用将会自动释放。

2.error是本地变量,如果error是一个实例变量(instance variable)的话会报错,具体报错信息为:“passing address of non-local object to __autoreleasing parameter for write-back”。

解决方法很简单,把(NSError **)修改为(NSError * __strong *)。

想要了解引用传递更细节的可以去看一下SO上的回答,分析的非常详细:Handling Pointer-to-Pointer Ownership Issues in ARC

C++ 通过函数修改指针地址(指针的指针作为参数传递给函数) 需求:通过函数修改指针pointtodefine,使其指向自定义的类MyClass。 方法:需要将指向该指针的指针作为参数传递给函数,再在函数中修改(即指针的指针作为参数传递给函数) //函数定义 void user(void ** ppanonymity){ MyClass* target=new MyClass(); *ppanonymity=target; } int main(){ //调用方法 void* pointtodefine=null; us 阅读详情

相关推荐

图文详解为什么插入链表的函数参数要用指针的指针

#include <iostream> #include <string> using namespace std; struct ListNode { int val; ListNode* next; }; void AddToTail(ListNode* *pHead, int value) //为什么传递的是指针的指针呢? { ListNode* pNew ...

weixin_44162337的博客 959

【C语言】函数传参 — 传值、传指针、传指针的指针

前言 本文结合这两篇文章加上自己的理解总结所写:文章一、文章二。 想要解决的问题 在学习数据结构中创建单链表的时候,疑惑:已经定义了Node,用到结构体指针的时候直接用*Node就好了,为什么还要再定义一个*LinkList呢,为什么传参的时候又要用LinkList *L呢? 下面我们就来循序渐进,由浅入深来解决问题,这里举两个例子作为比较。 首先来看这个例子: 找出一个长度为10的int型数组的最大和最小值(这里限定必须要用函数来实现) int arr[] = {1,8,10,2,-5,0,7,15,4

m0_50833438的博客 1271

二叉树的建立中指向指针的指针的运用

刚开始学C语言,对指针不是很了解,这两天看《大话数据结构》中二叉树的建立那里,运用了指向指针的指针,迷茫了一天,现在终于有了一点点思路,赶紧记录下来。在网上查了一句话:如果希望在一个函数的参数中改变一个指针的值,只能传这个指针的指针给这个函数。我理解的意思就是,如果我们调用函数时传入一个指针参数,我们在这个函数中不能修改这个指针的值,只能修改这个指针指向的内容,如果想要修改它的值,就必须把这个指针

木木夕的专栏 3533

IOS开发技术之──头文件引用(@class/#import/#include)

一、 Objective-C 中 #import 和 #include 的区别 预编译指令 Objective-C:#import C,C++:#include #import由gcc编译器支持 在 Objective-C 中,#import 被当成 #include 指令的改良版本来使用。除此之外,#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题...

Pengt‘s Blog 361

ios demo,object-c调用函数和c++函数

ios demo,object-c调用函数和c++函数。

基于rms包的限制性立方样条回归(RCS)R代码实现

RCS

2301_79584199的博客 2万+

iOS基础之OC:对象作为对象方法的参数

有参数的方法:        定义语法:  -(void)方法名:(参数类型)参数1 方法名2:(参数类型)参数2; 把对象作为方法的参数:        语法:-(void)方法名:(类名 *)参数1;   调用:        [对象 方法名:对象]        例: [d displayPerson:p1];   注意:C以前分 值传递和引用传递,

strangerben的博客 988

Latex小白也能搞定!5分钟教你用Overleaf打造个性化简历(附免费模板)

本文为LaTeX新手提供了一份快速上手指南,教你如何在5分钟内使用Overleaf在线平台和现成模板,轻松打造专业且个性化的简历。文章详细介绍了从选择模板、替换个人信息到进行颜色、图标等个性化调整的完整流程,让你无需深入学习LaTeX语法,即可高效制作出排版精美、脱颖而出的求职简历。

2a4s6d8f0g的博客 682

错误“Object reference not set to an instance of an object”的解决方法

在进行unity游戏制作的C#代码编写时,会遇到“NullReferenceException: Object reference not set to an instance of an object”这样的错误提示。错误的意思翻译过来是“未将对象引用到对象的实例”,意思就是声明了对象,却没有给它赋值,导致运行的时候依旧是null值。 个人遇到这个情况是在获取控件的时候,原代码为: “text1...

qq_41934745的博客 43万+

FPGA新手必看:Create HDL Wrapper和Generating Output Products到底该先用哪个?

本文深入解析了FPGA设计中Create HDL Wrapper与Generating Output Products的正确使用顺序,帮助新手避免常见错误。详细介绍了两者的功能差异、执行顺序的底层逻辑以及工程管理的最佳实践,特别适合使用Vivado进行FPGA开发的初学者。

xk7n92h3p5m的博客 1064

CDR学习笔记——02

这篇写一些高级CDR的架构原理。

... 1015

ios学习之 方法中的参数为引用类型

// // ViewController.m // NSBundle // // Created by yuandian on 15/7/20. // Copyright (c) 2015年 yuandian. All rights reserved. // #import "ViewController.h" @interface ViewController () @proper

bailong025的专栏 1043

六自由度机械臂运动学分析及其轨迹规划

六自由度机械臂轨迹规划 通过对比三次多项式插值法与五次多项式插值法的效果,选取后者对机械臂进行轨迹规划,将运动学解导入Matlab Robotics Toolbox仿真,得到各关节角度、速度和加速度与时间关系曲线。 三次多项式插值法 三次多项式有4个待定系数,可同时对起始点和目标点的角度和角速度给出约束条件。 数学公式 MATLAB代码 五次多项式插值法 五次多项式有6个待定系数,可同时对起始点和...

两条眉毛 6万+

指针作为函数参数传递以及指针的指针

指针作为函数参数传递 函数参数传递的只能是数值,所以当指针作为参数传递时,传递的是指针的值,而不是地址。 #include <stdio.h> void pointer(int* p) { int a = 11; printf("\n\nEnter function"); printf("\nthe p is point to %p , addr is %X,*p is %d",...

z1360408752的博客 2981

DSPy 入门: 再见提示,你好编程

DSPy("Declarative Self-improving Language Programs (in Python)",发音为 "dee-es-pie")[1] 是斯坦福大学 NLP 研究人员开发的 "基础模型编程 "框架。它强调编程而非提示,并将构建基于 LM 的管道从操作提示转向编程。因此,它旨在解决构建基于 LM 应用程序时的脆弱性问题。DSPy 还将程序的信息流与每一步的参数(提示和 LM 权重)分离开来,为构建基于 LM 的应用程序提供了更系统的方法。

具身机器人和通用AI 3483

【Unity的HDRP渲染管线下实现好用的GUI模糊和外描边流光效果_Blur_OutLine_案例分享(内附源码)】

因为没有用到纹理,但介于是UI层,没有MainTeX的时候,会提示报错,所以这里加上了MainTex,最后不在片段着色渲染出来既可。这样UI层级显示正常了,但旋转后的模糊效果,跟背景拼接不上,有很大的偏移。猜测是屏幕UV采样错误导致,只要找到屏幕UV数值,更正过来就可以了,RenderTexture设置一下Size既可,其他的先不管。没有贴图,用Shader实现外描边流光效果。将主相机拖入Render Camera。新建一个RenderTexture。

暴走约伯的博客 1149

C语言中的引用,以及传递引用,数组传递

详解c++指针的指针和指针的引用 以下参考自:https://www.cnblogs.com/li-peng/p/4116349.html 展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它。(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递。 如果我们在方法内部修改...

edward_zcl的博客 2万+

手把手教你学Simulink--双足机器人的自动避障控制策略仿真

自动避障是双足机器人导航系统中的一个关键功能,它允许机器人在动态或静态环境中自主地避开障碍物。实现这一功能通常需要结合路径规划、环境感知和实时控制算法。在本教程中,我们将使用MATLAB和Simulink来创建一个简化版的双足机器人自动避障控制系统仿真。

MHD0815的博客 160

C++指针的引用*&

指针的引用0 前言1 指针的指针和指针的引用2 例子 0 前言 今天刷leetcode的时候,看到了一个人在函数的形参中使用了这样的一个参数 TreeNode*& prev,我当时就蒙了,这是什么操作,怎么之前从来没有见过。后来学习了一下,发现这是指针的引用还是很好理解的,在此做记录。 1 指针的指针和指针的引用 我们知道在C++中指针也是一种变量类型,其中存储的是地址。 我们知道C++中...

Lavi的专栏 5449

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C++ **(指针的指针)和*&(指针的引用)——个人理解

一、解释*和& &在变量定义区,表示引用 int &x ; &在变量操作区,表示取地址符 int x=10, *p=&x ; *在变量定义区,表示指针 int *x ; *在变量操作区,表示解引用 int *x ;cout<<*x ; 二、解释**和*& **是指 指针的指针 *&是指 指针的引用 注意:只有对指针的引用,没有指向引用的指针!(因为引用本身不是对象) 三、代码解释传单指针、传双指针、传指针的引用 具体使用起来原理是相同

Cristina的博客 6156

深度学习工具包 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++中引用,指针,指针的引用,指针的指针

定义一个指针的三种写法都对:1. int * p;  2. int* p;  3. int *p; 习惯不同而已 定义一个函数指针的三种写法都对:1. int *p(); 2. int * p(); 3. int* p(); 1、指针传递和引用传递 在C语言中,如果要实现在函数内部改变外部变量的值的话,就应该传递这个变量的指针。如果要通过指针访问变量,必须使用指针运算符“*”。这样在

luoshenFU的专栏 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

指针作为函数参数:实现“引用传递”

在编程世界中,函数参数传递是一个核心概念,尤其是在像 C 和 C++ 这样的语言中。虽然 C++ 引入了真正的引用类型,但 C 语言中,我们通过指针来模拟“引用传递”的效果,这允许函数修改调用者作用域中的变量。这篇博客将深入探讨指针作为函数参数的用法,展示如何实现类似引用传递的行为,并提供实用的代码示例、图表和资源链接来帮助您掌握这一重要主题。但通过使用指针,我们可以模拟引用传递:传递变量的地址(一个指针),函数通过解引用指针来访问和修改原始数据。的地址,函数通过指针直接操作内存中的值。

always_TT的博客 510

C++ 值传递、指针传递、引用传递详解

转载:http://www.cnblogs.com/yanlingyin/ 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入, 不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。 指针传递: 形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作...

yu121380的博客 3180

C语言的指针传递和C++的引用传递

首先,C语言没有引用传递。 C++中使用引用传递的方式是在函数的参数前加&号,如: void Delete_X(LinkList &L, ElemType x) // 声明 Delete_X(L, 45); // 使用 C:指针作为参数传入函数中时,是值传递 示例代码: #include <stdio.h> void fun(i...

weixin_40908748的博客 2056

引用和指针的指针在作为形参时的区别

引用和指针的指针在作为形参时的区别 形参的工作原理 形参是传值作用,如果形参不进行引用的话,把函数调用时的参数的值,传递给形参。如果形参进行引用,那么就相当于把函数调用时的参数,在子函数里面起了个别名。所以如果想通过子函数改变变量的值,那么就有两种解决方案,分别是引用和指针的指针。 引用 相当于在子函数里面起了个别名。所以,在子函数里面就直接用别名操作就可以。 #include<iostre...

kingKINGabduxhbs的博客 707

详解c++指针的指针和指针的引用(转)

详解c++指针的指针和指针的引用 展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它。(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递。 如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的...

blacet的专栏 969
上一篇: iOS多线程系列(3)GCD(Grand Central Dispatch)
下一篇: hitTest:withEvent:截获子视图消息
一秀
博客等级 码龄14年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值