【谣言】指针比数组速度快?指针比数组速度慢?

ESP32开发环境避坑指南:用Thonny烧录MicroPython固件时常见的5个错误及解决方法 本文针对ESP32开发新手,详细解析了使用Thonny IDE烧录MicroPython固件时最常见的5个错误及其解决方案。内容涵盖驱动安装、端口识别、固件烧录失败、版本兼容性、连接不稳定以及文件系统操作异常等核心痛点,并提供硬件层面的深度排查指南,帮助开发者高效搭建稳定的ESP32开发环境。 阅读详情

Python微信订餐小程序课程视频

https://edu.youkuaiyun.com/course/detail/36074

Python实战量化交易理财系统

https://edu.youkuaiyun.com/course/detail/35475
最近总是听说各类说法,例如数组的速度比指针快,或是指针的速度比数组快。事实上,这两种的速度是基本一致的。

关于链表的两种实现方式,经过测试,平均运行时间都在0.17s左右
刚才测得的一些数据:

  • 链表 指针版
    0.1932
    0.1551
    0.1618
    0.1598
    0.2269
    平均0.1793
  • 链表 数组版
    0.1513
    0.1901
    0.1651
    0.1615
    0.1852
    平均0.1706

实验数据存在误差,可以认定,数组和指针的运行时间基本相同。
至于其内部原理,我想说,数组本质就是指针,不理解的可以看看我之前写过的文章,即:

p[i]=*(p+i)

使用数组的lst[p].next,寻址的时候需要使用一次指针,而p->next也是一次指针,效率相同。

最后附上测试代码:
指针版

#include
using namespace std;
const int N=1e3+10;
struct List{
	int val;
	struct List *next;
	List(){
		val=0;next=NULL;
	}
};
struct List *head;
void insert(){
	struct List *p=head;
	while(p->next!=NULL)p=p->next;
	p->next=new List;
}
int main(){
	head=new List;
	for(int i=1;i<=N;i++)insert();
	return 0;
}

数组版

#include
using namespace std;
const int N=1e3+10;
struct List{
	int val;
	int next;
}lst[2*N];
int idx=1;
int head=1;
void insert(){
	int p=head;
	while(lst[p].next!=0)p=lst[p].next;
	lst[p].next=++idx;
	lst[idx].val=0;lst[idx].next=0;
}
int main(){
	lst[head].val=0;
	lst[head].next=0;
	for(int i=1;i<=N;i++)insert();
	return 0;
}

OpenCv —— 检测车牌号(附完整源码) OpenCv —— 检测车牌号 阅读详情

相关推荐

hcaptcha无感验证码逆向实战:从接口分析到环境补全

本文详细解析了hcaptcha无感验证码的逆向实战过程。通过分析核心接口与加密逻辑,重点介绍了采用环境补全策略来模拟真实浏览器环境,从而绕过验证码检测。文章提供了从接口抓包、剖析hsw.js加密核心到使用Node.js搭建模拟环境的完整步骤,为自动化操作提供了一种稳健的解决方案。

weixin_29324401的博客 1156

C语言数组操作和指针操作谁更高效

1. 数组和指针操作对比 #include <stdio.h> int main() { char *char_p, char_arr[5]={0,1,2}; short *short_p, short_arr[5]={1,2,3}; int *int_p, int_arr[5]={2,3,4}; char_p=c...

EmbeddedCoder 的优快云博客 2532

MT4-EA自动化交易研究笔记(2022-04-22)

自从接触到mt4的EA自动化交易,更让我这个10多年的老程序员看到了曙光,目前来看也确实出了一点成果,只是是否能稳定盈利有待时间的考验,所以开此专栏,一来做做记录与分析,更好的优化我的EA,二来也希望能与更多的高手交流,以完善我的交易系统

t35254056的博客 2291

指针和数组 谁快

谭浩强老师的《C语言程序设计》第二版,page211页,有这样一段话:引用数组元素可以用下标法,也可以用指针法,即通过指向数组元素的指针找到所需的元素。使用指针法能使目标程序质量高(占内存少,运行速度快)。每次看到这个地方我都有点不解。后来在VC6.0环境下想了个实验办法,编写一个简单的控制台程序,利用反汇编工具察看编译后的代码,发现好像不是这样子的。从下面代码看,好像利用指针访问数组元...

weixin_30289831的博客 621

Vscode搭配Keil Assistant插件,头文件红色波浪线终极修复指南

本文详细解析了Vscode搭配Keil Assistant插件时出现头文件红色波浪线问题的根源,即ARMCC与ARMCLANG编译器的兼容性问题,并提供了三种实用解决方案:复制文件夹、创建符号链接和手动配置includePath,帮助开发者彻底修复错误,恢复代码跳转和自动补全功能。

q1w3e5r7t9y的博客 353

数学建模:相关性分析学习——皮尔逊(pearson)相关系数与斯皮尔曼(spearman)相关系数

相关性分析:求解相关系数并绘制热力图进行对比

weixin_67565775的博客 8万+

数组和指针的对比---指针一定效率高吗

数组和指针的对比---指针一定效率高吗前言一、指针和数组可以互换使用吗?二、指针一定比数组效率高吗?1.不加入Ox优化选项2.加入Ox优化选项总结 前言 在这个专栏的第一期里,笔者以实际项目中看到的一个模型,分析了指针类型对地址取值的影响。这一期,还是围绕指针这个重头戏,分析下数组和指针的异同。 一、指针和数组可以互换使用吗? 数组可以认为是一系列相同类型连续排列数据的集合,指针是指向一定类型数据的变量。单从定义上看,两者就不同了。参考以下2个说明: int a[5]; int *b; 这里,可以让

Cerman的博客 2767

【UE4】Hierarchical Instanced Static Mesh——一种速度优于Spawn的实例化物体组件

最近需要在场景中实例出很多个相同的模型,位置也很有规律,并且要对它的位置信息进行更新。 但是一个个拖进去实在太麻烦,就发现了Spawn Actor这个蓝图方法,可以实例一个蓝图类在场景中。 但是由于数量较大,实例化的速度太慢,这时发现了一个神奇的组件——Hierarchical Instanced Static Mesh。 新建一个蓝图类,添加该组件,在细节里添加你要实例化的模型对象。 ...

ColorGalaxy 1万+

【学习】-C/C++各种计算速度汇总

本文使用环境: 主控:arm-a53 编译环境:g++ 开发板: 写在前面: 这篇文章仅仅只为学习。记录不同的优化和不用的循环方式,对时间的影响。 一、数组和指针循环计算 1、数组的乘法 long long sum = 0; char mmm[num] = {0}; char ttt[num] = {0}; void test1() { sum = 0; for(int i=0;i<num;i++) { sum += mmm[i] * ttt[i]; } } 2、指针的乘法 c

qq_37280428的博客 1438

UG\NX二次开发 获取对象的层、颜色、隐藏状态、线宽、线型、高亮显示状态

获取对象的层、颜色、隐藏状态、线宽、线型、高亮显示状态。

王牌飞行员_里海的博客 1983

Flink实战(101):双流join(三)双流中实现Inner Join、Left Join与Right Join

声明:本系列博客是根据SGG的视频整理而成,非常适合大家入门学习。 《2021年最新版大数据面试题全面开启更新》 简介 之前文章中提到JoinedStream与CoGroupedStream,例如下列代码: dataStream.join(otherStream) .where(0).equalTo(1) .window(TumblingEventTimeWindows.of(Time.seconds(3))) .apply { ... } 由于joinedStream与

微信搜:import_bigdata,大数据领域硬核原创作者 738

C语言开发里指针到底快还是不快?(底层汇编解释)

C语言开发里指针到底快还是不快? 答:不快,甚至比一般变量要慢! 近日我能看到网上很多人说指针快,我非常纳闷,因为我在学习汇编和cpu底层架构时去翻译过c语言的一些指针代码,给我的答案是:指针从来不快于变量,它比普通变量调用慢一拍。 同时为了验证我是正确的,我去找了许多资料,c语言之父:丹尼斯·里奇也没有说过指针快于普通变量,人家只是说指针更灵活,更便捷。 今天看到很多人在说指针快于普通变量这一点,我感到这样非常误人子弟,说这些话的人可能自己都没有去研究过指针,对指针的理解不是很透彻。 很多人说指

17岁boy的博客 3178

uniapp(全端兼容) - 最新详细实现双色球开奖走势图功能组件,uni-app红球走势图/蓝球走势图,解决双色球 “蓝球连线“ 问题,双色球效果及用线连接每个号码详细教程(同样适用于彩票开奖走势图

uni-app,双色球,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,红球走势,蓝球走势,连线,uniapp(vue):js实现双色球开奖走势图带连线,vue2,vue3,uniApp双色球组件插件,uniapp如何实现双色球走势图和连线,彩票走势图,前端 Vue实现彩票走势图,详细示例,走势图,彩票项目,绘制股票走势图,前端 JS实现彩票开奖走势图 连线,Uniapp有没有双色球的页面代码,红球蓝球的走势图如何做,双色球红球和值尾走势图,

✅ 精选推荐文章 3346

【C语言指针】用指针提升数组的运算效率

指针对于整个大项目的效率提升是非常明显的,请不要忽视这个非常棒的C语言功能。

SN-Grotesque 716

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

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

深度学习工具包 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语言指针寻址快还是数组,【C++11】再认识C语言中的指针与数组的区别

##指针与地址 p = &c把c的地址赋值给p,我们称p为指向c的指针。地址运算符只能作用于内存中的对象,即变量和数组元素。即这样是合理的p = &c[0].一元运算符*是间接寻址或间接引用运算符ip一般代表的是指向int的指针,下面为ip的声明:int *ip;这样生命是为了记忆,该声明语局表明表达式*ip的结果时int类型。这种声明变量的语法与声明变量所在表达式的语法类似。同样...

weixin_42467533的博客 653

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

指针访问与数组访问的效率分析

转载请注明出处 作者:小马   很多人都知道指针访问比数组访问效率高, 但很少人明白其中的原理, 这篇文章从汇编级别上分析一下原因. 我用一个"reverse"函数来作为例子, 分别用指针和数组的形式来实现这个函数. //指针访问 void reverse(cha

lucasma的博客 6258

Statistics and Machine Learning Toolbox

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

指针数组与二维数组的比较

指针数组与一维数组的比较 想把十个字符串写入 数组中,选择数组还是指针数组。这里作出比较: 一维数组: 一维数组在定义时需要确定一维的大小。等于说在内存中已经为这个一维数组分配了一定的空间,且每个元素的大小是一样的。 指针数组: 指针数组大都是一维数组,每个元素都是指针。每个指针都可以指向另外的内容。在定义时只需要确定指针的数量,对指针所指向的内容大小不要求 例如,想要保存十个国家的名字。选择一维数组每个元素的大小应该以最长国家名为标准。选择指针数组每个国家的名字所占的内存都是由国家名而定的。在这一方面指针

m0_49447039的博客 400

指针数组与二維数组的区别

下面有两个定义: int a[10][20]; int *b[10]; 其中a是一个真正的二維数组,它分配了200个int类型的存储空间,并且通过常规的矩阵下标运算可以得到矩阵元素, 对于b来说,该定义仅仅分配了10个指针,并且没有对它们初始化,它们的初始化必须以显示的方式进行,比如静态初始化或通过代码初始化.假定b的每个元素都指向一个具有20个元素的数组,那么编译器就要为它分配200个i

buaa_shang的专栏 1168

指针 数组 优点缺点分析 及 调用函数的流程

1.指针的优势:           ①可以直接访问硬件 访问速度快           ②提高空间的利用率           ③指针使用地更加灵活       空间分配                      访问效率   指针保存的是地址 (4字节) 直接 快       数组保存的是一片连续的空间    定位 加减   2.指针与数组的区别:      ①空间分配

Bernie.John 5826

C语言 数组VS指针

数组和指针完全是不一样的两个东西,但他们可以完成相同的功能。所以我们需要区分他们,大概可以从5个方面来区分: 1 空间分配: 数组:如果是局部变量,就在栈上分配一块连续的空间,分配的空间一般要比实际使用的大。属于静态分配空间。 指针:在堆上分配空间,是动态分配空间 2 访问效率: 数组属于直接访问,所以效率较高。而指针需要先访问指针的地址,再找到它所指向的空间,属于间接访

zhuhuiyu_的博客 498

数组与指针速度对比(arm指令),哪个更快

数组与指针速度对比(arm指令), 指针应该更快.

443

C语言——指针和数组地址、链表和数组的区别

1.指针和数组地址的区别: 指针是一个变量,存储的是相应数据类型的地址;数组地址是一个地址常量;所以,指针可以进行增量运算,而数组名(指向该数组的地址,即数组首元素的地址)不可以进行增量运算; 但在函数传参时,情况有所变化,将一个数组传入函数,函数会将形参的数组名退化成一个指针,此时,在函数内,数组名可以进行增量运算。 2.链表和数组的区别: 数组的优点:随机访问性强        ...

weixin_40203143的博客 1089

快慢指针问题【C语言】

给定一个头结点为head的非空单链表,返回链表的中间结点。定义一个快指针:fast,一个慢指针:slow。如果有两个中间结点,则返回第二个中间结点。利用两个指针的速度差。

Bella_Notte的博客 848

转:C代码优化方案

目录C代码优化方案1、选择合适的算法和数据结构2、使用尽量小的数据类型3、减少运算的强度(1)、查表(游戏程序员必修课)(2)、求余运算(3)、平方运算(4)、用移位实现乘除法运算(5)、避免不必要的整数除法(6)、使用增量和减量操作符(7)、使用复合赋值表达式(8)、提取公共的子表达式4、结构体成员的布局(1)按数据类型的长度排序(2)

luixing67的专栏 1651

相同功能的程序,用指针比数组高效的原因解释

以下面的排序程序为例: 两程序分别为数组、指针实现冒泡排序,对应的一种版本的汇编语言(RISC-V架构)如下: 左图为数组,右图为指针。 可以看到,数组版本的程序,因为在每次对i进行递增1后,需要再次更新所需访问元素的地址,也就是需要在循环里完成两次乘(或加)操作,而指针版本,只需每次对指针p进行递增8即可,在循环里只有一次加操作。因此指针比数组高效。 但注意,现代先进的编译器,已经可以为数组版本的代码生成与指针版本同样性能的汇编代码。 ...

weixin_44697411的博客 360

数组与指针的区别

用运算符sizeof可以计算出数组的容量(字节数),而用sizeof却无法计算指针所指内存的容量,用sizeof(p)得到的结果永远是4或者2(即指针变量所占内存单元的字节数,一般情况下指针变量占2个或4个字节的内存单元)。而指针却不同,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。指针是动态分配空间,通过malloc在堆上分配所需要的空间,分配的空间不一定连续,在使用完之后需要调用free()来释放分配空间。数组的本质则是一系列的变量。

番茄的博客 555
上一篇: 【数据结构与算法】手撕红黑树
下一篇: Spring Security 一键接入验证码登录和小程序登录
pythonxxoo
博客等级 码龄5年 337粉丝 670原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值