C++ 变量的存储位置、作用域和生存周期

C\C++各种变量存放区域(代码、数据、堆、栈) 声明为register的变量在由内存调入到CPU寄存器后,则常驻在CPU的寄存器中,因此访问register变量将在很大程度上提高效率,因为省去了变量由内存调入到寄存器过程中的好几个指令周期。:被声明为静态类型的变量,无论是全局的还是局部的,都存储在数据区中,其生命周期为整个程序,如果是静态局部变量,其作用域为一对{}内,如果是静态全局变量,其作用域为当前文件。如果全局变量未被初始化,那么将被存在BBS区中,且在编译时,自动将其值赋值为0,如果已经被初始化,那么就被存在数据区中。 阅读详情

1. C语言中内存的分布:

C语言在内存中一共分为如下几个区域,分别是:

  1. 栈区(stack): 由编译器自动分配、释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  2. 堆区(heap) : 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
  3. 全局区(静态区):存储全局变量和静态变量,初始化的全局变量和静态变量在一块区域(RW), 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(ZI)。 - 程序结束后有系统释放
  4. 文字常量区 :常量字符串就是放在这里的。 程序结束后由系统释放 (RO)
  5. 程序代码区—存放函数体的二进制代码。 (RO)

在这里插入图片描述

  • text( 程序代码区和文字常量区): 用来存放程序执行代码,同时也会包含一些常量(如一些字符串常量等)。静态分配
    该段内存为静态分配,只读(某些架构可能允许修改)。
    这块内存是共享的,当有多个相同进程(Process)存在时,共用同一个text段。

  • GVAR(global value),用来存放程序中已经初始化的非零全局变量和静态变量。静态分配
    可分为读写(RW)区域和只读(RO)区域。
    -> RO段保存const常量所以也被称为.constdata
    -> RW段则是普通非常全局变量,静态变量就在其中

  • .bss: 存放程序中为未始化的和零值全局变量,和静态变量。静态分配内存。

  • 堆(Heap)往高地址方向生长,栈(Stack)往低地址方向生长。

在这里插入图片描述

在这里插入图片描述

2. 全局变量和静态变量的区别:

2.1 静态全局变量

#include<iostream>
using namespace std;
static int i = 5;
int j = 3;//默认为extern
int main()
{
    /*code*/
}
  • 全局变量 j 和静态全局变量 i 都存放于程序的全局数据区域,
  • 它们的生存周期都是程序的整个运行期,
  • 但是 j 的作用域为全局作用域,可以通过extern在其他文件中使用,而 i 的作用域为文件作用域,只能在文件A中使用,

例如在文件B中:

extern int j; //OK
extern int i; // error: i在文件B中不可见
int a = j; // OK
int b = i; // error

2.2 局部静态变量

#include<iostream>
using namespace std;
void fun()
{
    int i = 1; // 局部变量,具有动态生存期,每次进入函数时都初始化
    static int j = 2; //静态局部变量,具有全局寿命,局部可见,只第一次进入函数时被初始化
}
int main()
{
    static int j; //静态局部变量,具有全局寿命,局部可见
}

静态局部变量有以下特点:

  • 该变量在全局数据区分配内存;
  • 静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
  • 它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
《C++语言程序设计》变量的静态生存期和动态生存期 变量的静态生存期和动态生存期及其类型 阅读详情

相关推荐

C++全局变量与静态全局变量的异同(static与非static)

文章目录生命周期与作用域静态变量的声明——通过案例理解案例:局部声明静态变量案例:全局声明静态变量问题探讨:1. static全局变量与普通的全局变量有什么区别 ?2. static局部变量和普通局部变量有什么区别 ?3. static函数与普通函数有什么区别? 首先我们要知道两个概念:生命周期与作用域。 生命周期与作用域 生存周期: 变量从定义到销毁的时间范围。存放在全局数据区的变量的生存周期存在于整个程序运行期间,而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁,除了静态变量之外的局部变量都

流楚丶格念的博客 7336

C++中const关键字讲解

作用 1.const 修饰成员变量,定义成 const 常量,相较于宏常量,可进行类型检查,节省内存空间,提高了效率。 2.const 修饰函数参数,使得传递过来的函数参数的值不能改变。 3.const 修饰成员函数,使得成员函数不能修改任何类型的成员变量(mutable 修饰的变量除外),也不能调用非 const 成员函数,因为非 const 成员函数可能会修改成员变量。 在类中的用法 const 成员变量: 1.const 成员变量只能在类内声明、定义,在构造函数初始化列表中初始化。 2.const 成

weixin_43907175的博客 862

ads设计Doherty功放(1)

Doherty功放的设计

qq_40995480的博客 2万+

C/C++中全局变量、局部变量和静态变量的生存周期和作用域

C/C++中全局变量、局部变量和静态变量的生存周期和作用域。

weixin_44391223的博客 3100

西门子1500T插补控制实战:从硬件组态到轨迹规划

本文详细解析了西门子1500T插补控制的完整实战流程。从硬件组态中正确选择带T的CPU和配置报文105,到创建同步轴与插补器工艺对象,再到使用MC_Interpolator功能块编程实现直线与圆弧插补,并分享了调试技巧与常见问题解决方案,为工程师实现高精度复杂轨迹规划提供清晰指导。

weixin_29228781的博客 423

COLMAP生成MVSNet数据集

COLMAP生成MVSNet数据集

qq_43307074的博客 5635

C++ 炼气期之变量的生命周期和作用域

什么是变量的生命周期?从变量被分配空间到空间被收回的这一个时间段,称为变量的。什么是变量的作用域?在变量的生命周期内,其存储的数据并不是在任何地方都能使用,变量能使用的范围,称为变量的作用域。广义而言,可以根据变量的声明位置,把变量分为和:变量的声明位置也决定了变量在内存中的存储位置,如函数体内声明的局部变量一般会存储在中,如类中声明的变量存储在中,文件中声明的全局变量存储在存储区。程序运行时,会向申请一块内存区域用来存储程序运行时的指令和数据。运行系统会对分配到的内存区域进行管理。相当于给的是毛坯房,自己

y6123236的专栏 1383

WPS Office 2026免费安装指南:AI办公与安全使用全解析

办公软件作为数字化办公的核心工具,其基本原理是通过文档处理、数据计算和演示展示等功能模块满足用户日常办公需求。随着人工智能技术的发展,现代办公软件逐步集成AI能力,通过自然语言处理和数据分析算法提升工作效率。在技术价值层面,优秀的办公软件不仅需要保持格式兼容性和跨平台同步能力,更要注重用户数据安全防护。从应用场景来看,无论是个人文档编辑、企业报表分析还是团队协作演示,办公软件都发挥着关键作用。WPS Office 2026作为国产办公软件代表,深度融合AI助手功能,支持智能写作和数据分析,同时通过官方免费策

weixin_30599769的博客 708

C/C++中auto、static、register、extern关键字区别小结

本文介绍了四种存储说明符关键字的区别和使用注意小结

无鞋童鞋的博客 6080

基于 Spring Cloud 环境污染物数据分析与预测平台

基于 Spring Cloud 环境污染物数据分析与预测平台

934

图解移动机器人中的运动规划(Motion Planning),附几十种规划算法

运动规划是移动机器人的核心理论和工程技术之一,本文作为教程先导,解析了运动规划的两大组件——路径规划和轨迹规划。欢迎感兴趣的同学订阅专栏!

FRIGIDWINTER的博客 4万+

【C++】之《static》

全局静态变量 在全局变量前加上关键字static,全局变量就定义成一个全局静态变量. 静态存储区,在整个程序运行期间一直存在。 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化); 作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。 局部静态变量 在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。 内存中的位置:静态存储区 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除.

Jughead 437

基于FPGA的7x7矩阵求逆verilog开发

up目录一、理论基础二、核心程序三、测试结果 矩阵求逆,即求矩阵的逆矩阵。矩阵是线性代数的主要内容,很多实际问题用矩阵的思想去解既简单又快捷。逆矩阵又是矩阵理论的很重要的内容,逆矩阵的求法自然也就成为线性代数研究的主要内容之一。设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩B,使得: AB=BA=E。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。其中,E为单位矩阵。典型的矩阵求逆方法有:利用定义求逆矩阵、初等变换法、伴随阵法、恒等变形法等。 逆矩阵的求法有多种,其中重要

FPGA/MATLAB学习教程/源码/项目合作开发 3898

C++中局部变量、全局变量、静态局部变量、静态全局变量

我们知道在C++中的变量根据定义的位置的不同生存周期,具有不同的作用域。具体分为6种:

Payshent的博客 2365

匹配博弈双边选择算法

刚学图论匹配方面的一些知识,记录下来。

ymengm的博客 2434

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Static关键字在C和C++中的相同和不同

Static关键字在C和C++中的相同和不同 1、相同之处 名称 作用域 生存周期 存储位置 默认值 初始化次数 局部静态变量 函数之内 应用生命周期 静态存储区 0 只能1次 普通局部变量 函数之内 函数周期 栈 系统随机 多次赋值 全局静态变量 源文件之内 应用生命周期 静态存储区 0 只能1次 普通全局变量 整个工程 函数周期 栈 系统随机 多次赋值 静态函数 源文件之内 应用生命周期 静态存储区 普通函数 整个工程 弹栈出栈 栈 注意点: 由上表可以看

技术追求者! 248

深度学习工具包 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++ 关键字 static 详解

使用了很久的C++中的关键字static,却从未进行过详细的梳理。今天我们将对static关键字进行梳理。 首先我们要对static的特性和作用进行总结 1.存储位置:经过static修饰的变量,在内存中存储在“全局(静态)区”。 我们可以扩展一下,程序在内存中究竟有多少存储区域,每个存储区域都是用来干嘛的。 堆区:是由程序员手动申请(new)与释放(delete)的内存区域。从低地址向高...

漫步繁华街的专栏 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

static的全面理解(C部分)

出现位置:第一轮基础类笔试或技术一面 难度系数:低 相关题目: (1)列出所有你对static的理解,所有的! (2)谈谈你对static的理解(C部分,或者C++部分)。 考点分析: (1)C语言基础知识。static。 (2)是否深究技术细节。 解题思路:        static定义的数据存放的区域,怎么初始化?以及它的生存周期和作

chunlanse2014的专栏 504

C/C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别

static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。  一、面向过程设计中的static全局变量、局部变量、静态全局变量、静态局部变量的区别 C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用

随机事件 604

全局变量、静态变量、局部变量的生存周期与作用域

不管是在全局还是局部声明的static变量都存放于程序的全局变量区域,全局变量也是存放于程序的全局变量区域,所以它们的生命周期是从程序开始到程序结束。 它们的作用域决定于它被存放和定义的位置。

Nine_CC的博客 3万+

C语言—变量的存储方式、作用域和生存周期

变量的存储方式、作用域和生存周期一、变量的存储方式二、变量的作用域和生存周期1.局部变量的存储类别a.普通局部变量b.static局部变量c.寄存器变量(register变量)2.全局变量的存储类别a.在一个文件内扩展全局变量的作用域b.将全局变量的作用域扩展到其它文件c.将全局变量的作用域限制在本文件中三、其它杂项讨论(重点:字符串)a.extern函数和static函数的区别(作用域)b.const变量和static变量存放位置c.关于字符串常量存储讨论四、参考博文 一、变量的存储方式 在C语言中,每

little_rookie__的博客 2436

【c++】变量的作用域和生存周期

【c++】变量的作用域和生存周期一.作用域和生存周期二.局部变量和全局变量三.变量的存储类别四.分别介绍以上四种存储类型(auto/static/register/extern)五.四种变量的作用域、生命周期、内存分布(全局、静态全局、静态局部、局部变量) 参考:《c++从入门到精通》人民邮电出版社C语言中变量的作用域和生命周期https://blog.youkuaiyun.com/zsjalive/arti...

gogo小Sa的专栏 1万+

【C++】全局变量、静态变量、局部变量的生存周期与作用域

C++ 全局变量、静态变量、局部变量的生存周期与作用域

qq_44839042的博客 1142

c++中的作用域

1. C++变量根据定义位置的不同,具有不同的作用域, 作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。 2.从作用域看: 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。 静态局部变量具有局部作用域。它只被初始化一次,从第一次初始化直到程序运行结束都一直存在,他和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数

liyang_nash的专栏 7570

C++语法————栈作用域生存周期

栈作用域中的变量在栈上分配内存,生命周期从进入作用域开始,到离开作用域时结束。栈上变量自动分配和释放内存,作用域结束后变量被销毁。返回局部栈变量的地址会导致未定义行为,应当避免。过深的递归或大量栈内存使用可能会导致栈溢出。

m0_73633088的博客 1261

static变量、全局变量及其存储位置、extern关键字

static变量:在程序执行前系统就为之静态分配(也即在运行时中不再改变分配情况)存储空间的一类变量。 static全局变量:相当于全局变量,但只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它,而extern全局变量可以。 static局部变量:只在定义的函数体内有效,第一次定义时初始化,后续再次进入子函数时不进行初始化,保持上次的值不变。 void f(){ static int count=0; count++; cout<<count<&l

qq_40586164的博客 8520
上一篇: 指针和引用的区别
下一篇: 算法题:50个人至少有两个人生日相同的概率
Candyerer
博客等级 码龄7年 20粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值