我的sizeof(struct)探索之旅

【C语言经典编程技术】C语言中union与struct的区别及sizeof的计算方式 C语言中union与struct的区别 在C语言中结构体和联合具有细微差别,特别是使用sizeof()对其求大小时,许多刚刚接触C语言不久的朋友对此非常困惑,下面我将简单谈一下自己对union与struct之间的区别 联 合(union) 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型... 阅读详情


今天接到一个电话面试,被问到这个问题,很自信的回答却被嘲讽了,naive,还是自己没有掌握透彻,今天就好好八一八这玩意儿。

面试问我的是这样的一个结构体的大小(sizeof)

struct A{
    char c;
    double d;
    int a;
};
我回答4+8+4=16,结果面试官让我自己敲一敲试一试。
自己VS2013试了一下还真是错的,是24

百度了下,这篇博文(点击打开链接)讲得挺清楚,自己看了看,总结一下:

1、如果编译器不指定自定义的对齐方式的话,编译器按照默认的方式对齐

默认的方式是指什么呢?vc和vs里面是按照8字节对齐,g++里面是按照4字节对齐

具体点说,默认的对齐方式指当前要存储的这个成员变量的大小要能整除当前的偏移量(相对于结构变量首地址的)。

最后,所有的字节数相加要是成员变量里面最大的那个变量的大小的倍数(比如有一个8字节的变量,对齐之后总共占20个字节,那么需要补4个够8的倍数到24)

注意C++里面最大的默认数据类型的大小为8(int 4,long4,long long 8, float 4, double 8)

2、如果指定了n字节对齐的方式,比如4字节对齐。那么如果n大于下一个要存的成员变量的大小,按n对齐,否则按成员变量的大小对齐(或者说是默认的方式对齐)

最后,所有的字节数相加要是n的倍数(vs默认的为8)


所以,回顾我自己的那一道面试题,我计算的时候是按照4字节对齐算的,8字节对齐的时候结果不一样。


同时,我自己思考了一下,如果一个结构体的成员变量是另一个结构体会怎么样呢?

做了个实验:


感觉就像是将AA里面的成员变量直接贴在那个位置之后算出来的结果

说明,并不是按照AA(最大的成员变量)的大小来对齐(16*2),而是按照基本类型对齐

LED单元板驱动(HUB75接口) 开始之前先吐槽一下,搜这个的资料。要么都是Arduino,要么单片机的收费。小小的一个LED单元板,凭什么? 用Arduino是你速度快还是我ST,树莓派不好用?收费更离谱,这点东西还藏私?给你个中指凸。把原理都写出来看你怎么收费。 一、接口定义及原理 如图,有两个RGB通道,共占用6个IO。剩下的ABCDE为地址通道,LAT为行数据锁存通道,CLK为数据时钟,OE为低电平使能LED显示。图片这里没有E,证明它是16扫的,有E就会把B上面的地改为E。这样就是5位,2的5次方32扫。1. 阅读详情

相关推荐

RTKLIB中RTK定位原理(一)

1 模型 1.1 非差观测值 非差观测值与RTKLIB中PPP定位原理——观测模型部分中一致。 1.2 单间单差观测值 若两个接收机距离较近,经过站间单差,电离层对流层延迟可消除,卫星s的钟差以及初始相位被消除,中依然包含接收机初始相位。 1.3 站间星间双差观测值 经过站间星间双差,接收机钟差及初始相位被消除。 2 EKF参数估计 2.1 EKF法则 EKF法则与RTKLIB中PPP定位原理——观测模型部分中一致。 2.2 状态变量与时间更新 (1)状态变量 在RTK...

papunzal的博客 3817

Ubuntu14.04安装librealsense(camera R200)

刚开始安装之前,查了很多资料。后来发现还是官网的文档最靠谱。参考github上`/doc/installation.md`注意:现在github上librealsense的master branch是2.0版本的SDK,我的摄像头是R200,推荐安装的应该是1.0版本,在Legacy branch下面。这点需要额外注意,我就是因为没注意读说明,上来就装了mater branch下的2.0,结果打不...

github_38704428的博客 1812

NotebookLM平替实测:用Open Notebook+Ollama零成本搭建私有AI知识库

本文提供了一份详细的实战指南,教你如何利用Open Notebook与Ollama,在本地零成本搭建一个功能强大且完全私有的AI知识库。通过Docker容器化部署,实现数据绝对安全、模型自由选择与离线运行,是NotebookLM等云端工具的绝佳平替方案,尤其适合注重数据隐私的教育工作者、研究者及小团队。

weixin_29052717的博客 514

[C++]深度探索C++对象模型——关于默认构造函数

原书第二章第一节的内容 关于Default constructor的概念:没有任何形参的constructor(注意,不是说编译器自动为类添加的才叫Default constructor)。 这一节主要讲了编译器什么时候为类添加Default constructor? 先说结论:四种情况下,编译器会自动合成implicit nontrivial default constructor。 带...

github_38704428的博客 295

AI+AB测试提升电商主图点击率实战指南

在电商运营中,主图点击率(CTR)是衡量商品吸引力的核心指标,直接影响转化率和订单增长。通过AI技术批量生成高质量主图素材,结合数据驱动的AB测试方法,可以显著提升点击率。AI工具如MidJourney和Stable Diffusion能够快速生成多样化视觉方案,而自动化处理流水线则确保素材规格统一。AB测试体系通过多维变量控制和流量分配策略,科学验证不同素材效果。这种方法特别适用于需要快速迭代的电商场景,某女装店铺案例显示CTR从1.2%提升至3.8%,验证了AI+数据协同优化的技术价值。

weixin_29058331的博客 298

植物GO注释

本文主要是对没有GO term库的植物进行注释。 1、选用AgriGo 进行注释,在agriGO中点击species后,查看与你目标物种相近的物种作为库 2、比如我以甜菜为例 为了找到和GO term对应的ID,先找到PLAZA,进入网站https://bioinformatics.psb.ugent.be/plaza/versions/plaza_v3_di...

weixin_30300225的博客 2226

[C/C++]中按位“与”“或”“异或”的优先级比“==”低

项目调试时发现一个小问题,由于优先级没有搞对,导致的Bug。关于运算符优先级的问题以前学习的时候就没有太放在心上,因为一直觉得这个东西背了也没啥用,写程序的时候实在不行多加几个括号不就完事儿了吗。道理是不错的,这次就是少加了括号导致了一个常见的小Bug。记录一下,以后注意。 在C/C++中,if 语句简直是太常用了,if 语句中的条件判断为真的时候执行下面的语句(块),否则就不执行这些语句(块)...

github_38704428的博客 3700

基于ST32 DAC7311数模转换器驱动代码及电路设计完整版

基于ST32的DAC7311模数转换器的电路设计及驱动代码完整版

qq_39626643的博客 3720

视觉SLAM中的李群与李代数

写在前面 首先声明,这篇博客只是高博的《视觉SLAM十四讲》的学习笔记,稍加一些自己的领悟和思考。如果想系统和详细的学习李群与李代数,强烈建议移步。 为什么要使用李群和李代数 三维世界中刚体运动的描述方式,包括旋转矩阵、旋转向量、欧拉角、四元数等若干种方式。在SLAM 中,除了旋转表示之外,还要对它们进行估计和优化。因为在SLAM 中位姿是未知的,而我们需要解决什么样的相机位姿最符合当前观测数据这...

W_Tortoise的博客 1180

验证(uvm常见问题)--子类和父类的句柄和对象问题

sv中的子类和父类 在sv中,有如下两个类,child继承于parent。然后在test module中,正确转换的方法如下面所示。其中c1,c2,p1 都指向了同一个子类的对象c1。总结如下: 一个子类的对象是包括子类的成员变量,方法和父类的成员变量,方法。 子类的句柄c1可以直接赋值给父类的句柄p1,此时p1只可以访问父类的成员变量和方法,或者子类的虚方法,比如下面调用p1.display是...

q876507447的博客 7633

机器人中的数值优化(十三)——QP二次规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 2793

realsense R200在Ubuntu16.04上的安装

走了一部分弯路,首先按照https://github.com/IntelRealSense/librealsense的内容安装,运行例子一直提示已经找到了Realsense传感器, 但就是链接不上,之后在微信上和一个山大的同学交流,她提示该版本不支持realsense r200才发现问题所在,下面介绍具体安装过程。 1.首先,在github上下载librealsense v1.12.1版本(只有

hyacinth531的博客 3687

ESD防护设计宝典(十一):CE(传导发射)超标问题排查与解决

(Conducted Emission, CE),亦称为传导骚扰,是电子电气设备或系统内部的电压、电流通过信号线、电源线或地线向外传输,对其他电子电气设备或系统造成电磁干扰的物理现象。其。

m0_56451176的博客 856

sizeof(struct)与sizeof(union)的区别

sizeof(struct)与sizeof(union)的区别1、关于struct与union的内存分配方式2、关于struct与union的大小计算方式1、关于结构体的大小 1、关于struct与union的内存分配方式 (1)、结构体(struct)按照定义时的顺序,为每个成员在内存中依次分配独立空间; (2)、联合(union)只按成员中最大的类型分配空间,所有成员共享这个内存空间。 如下:...

weixin_44536482的博客 2080

WINCC7.3破解文件

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

使用sizeof得到struct大小的规则

在vchelp上ll199(赵小雅)的耐心教导下,我终于明白了使用sizeof来得到struct的原理,首先表示一下感谢。首先拉来看个例子:struct test{ char a; int b;};int main(){ int nSize = sizeof(test);    return 0;} 在使用vc编译器默认设置下得到的nsize是8,而不是5.为什么要这样呢?原来在cpu寻址是是8的

林建华的专栏 2579

数学建模模型总结

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

sizeof(struct)和sizeof(union)的结果分析及其原因

一个错误 有的时候,在脑海中停顿了很久的“显而易见”的东西,其实根本上就是错误的。就拿下面的问题来看: struct T { char ch; int i; }; 使用sizeof(T),将得到什么样的答案呢?要是以前,想都不用想,在32位机中,int是4个字节,char是1个字节,所以T一共是5个字节。实践出真知,在VS中测试了下,答案是8个字节。再来一个例子: un...

qq826364410的专栏 1644

深度学习工具包 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")

sizeof struct 问题

<br />sizeof()<br />  sizeof是运算符,可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号。<br />  它在编译时起作用,而不是运行时。<br />  这是初学者问得最多的一个问题,所以这里有必要多费点笔墨。让我们先看一个结构体:<br />  struct S1<br />  {<br />  char c;<br />  int i;<br />  };<br />  问sizeof(s1)等于多少聪明的你开始思考了,char占1个字节,

xuuhong的专栏 1098

enum,struct和union的介绍和sizeof大小计算

枚举、结构体和联合体摘要 枚举(enum) 特性:仅支持整型常量,成员共享内存(大小=最大成员) 使用:默认从0自增,可显式赋值;C中char合法(转为ASCII值),C++不合法 限制:不支持浮点、字符串等非整型值 大小:通常为4字节(int),超过范围可能用更大类型 结构体(struct) 用途:组合不同类型数据 内存对齐: 成员地址对齐自身大小 总大小为最大成员对齐值的整数倍 嵌套结构体以内部对齐为准 特殊: 空结构体在C++占1字节,C不允许 位域仅支持整型,按指定比特分配 联合体(union) 特

2302_78038473的博客 1023

C++之空类或空struct的sizeof是1

C++中空类和空结构体的sizeof结果为1,这是为了保证对象地址的唯一性。编译器会为空的类/结构体自动分配至少1字节内存,防止对象指针无法区分。静态成员不影响对象大小,而虚函数会因虚表指针增加对象体积(32位系统4字节,64位系统8字节)。这一设计确保了数组元素等场景下不同对象拥有独立地址。

hzjsnsj的博客 472

C语言中union与struct的区别及sizeof的计算方式

C语言中union与struct的区别 2011-08-02 23:41 45人阅读 评论(0) 收藏 举报     在C语言中结构体和联合具有细微差别,特别是使用sizeof()对其求大小时,许多刚刚接触C语言不久的朋友对此非常困惑,下面我将简单谈以下自

yangyan19870319的专栏 9262

sizeof struct

【转】SIZEOF 及 结构体联合体大小计算方法 Cpp代码  // Example of the sizeof keyword    size_t i = sizeof( int );     struct align_depends {        char c;        int i;    };    size_t size = sizeof(alig

u010442009的专栏 713

C++中的sizeof(struct)

关于C++中的sizeof(struct)是面试和笔试中经常出现的问题,下面将一些常见问题总结如下: 1 定义一个结构体,里面是空的,sizeof(struct)为多少?     sizeof(struct)=1,因为当我们在申请该类型的实例时,它必须在内存中占用一定的空间,VS中每个空类型的实例占用1字节的内存空间。 2 在空struct中加入构造函数和析构函数,sizeof(struct

dimondYu的博客 1280

struct 和 class的sizeof比较

对于有同样数量、同样类型成员的struct和class,sizeof的结果是一样的。本质相同:在c++中,struct和class的唯一本质区别是默认访问控制。c++标准没有对struct和class的内存布局做任何区分。只规定了访问控制和继承时的默认行为差异。struct默认成员是public。class默认成员是private。内存布局决定因素:sizeof结果由一下因素决定。访问控制修复不影响对象内存布局。它们的内存布局机制完全一致。编译器可能添加的填充字节。成员变量的大小和类型。

weixin_44845979的博客 235

Redis(一)之 struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr)))讲解

看Redis的源码的时候,我有点好奇,不知道 struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr))) 是啥意思,所以就了解了下,首先我们看sdshdr的结构体 /* * 类型别名,用于指向 sdshdr 的 buf 属性 */ typedef char *sds; /* * 保存字符串对象的结构 */ struct sdshdr...

大洋深处 2517

sizeof union struct 内存对齐

考虑下面问题:(默认对齐方式) C代码 union u  {  double a;  int b;  };     union u2  {  char a[13];  int b;  };     union u3  {  char a[13];  char b;  };     cout  都知道union的大小取决于它所有的成员中,占用空间最大的一个成员的大小。所以对于u来说,大小就是最大的double类型成员a了,所以sizeof(u)=sizeof(double)=8。但是对于u2和u3,最大的空间

wuhenliushui的专栏 542

struct的sizeof

struct 的sizeof是所有成员对齐后长度相加   (union的sizeof是取最大的成员长度)        在结构中,编译器为结构的每个成员按其自然边界(alignment)分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。

自留地 1127
下一篇: CMake Error: not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH
dummy_bot
博客等级 码龄10年 35粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值