关于C/C++指针星号 * 的写法问题

C++指针详解 概述 C/C++语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C/C++语言的灵魂一点都不为过。 有好的一面,必然会有坏的一面,指针的灵活导致了它的难以控制,所以C/C++程序员的很多bug是基于指针问题上的。今天就对指针进行详细的整理。 1、指针是什么? 指针是“指向(point to)”另外一种类型的复合类型。复合类型是指基于其它类型定义的类型。 理解指针,先从... 阅读详情

声明

为了方便理解,本文所举例中采用的"数据类型"都默认用 int 类型。

问题

对比下面不同的书写方式,请仔细体会区别与含义:

int* p;
int *p;

您感到什么了吗?

解释 

首先要说明,在现代中,很多C++编程规范中,建议星号*与 int 结合,而不是与后面的变量结合。

这样做比较清晰,不容易看错。如下所示,变量 p 里面是记录了变量 num 的"地址"信息:

int* p = #

但是这样做也会产生一定的问题,如下所示:

int* p1, *p2, p3;

// 请注意,上面只定义了两个指针变量,分别是 p1 和 p2;而 p3 只是普通变量(int类型)

解决这个问题也很简单,我们只需要规定,一行只能声明一个变量即可,特别是对指针类型来说。

int* p1;    // 指针
int* p2;    // 指针
int p3;    // 普通变量

值得说明的是,这只是一种规范,一种建议;如果不遵守,程序也不会报错。

其次要解释的是,C 语言设计的本意并不是把(int*)作为一个整体。

它的设计本意是解一个方程,请看下面的例子:

先定义一个变量,即,将 (*p) 当作一个整体,然后让(*p)的类型是 int。

从而就能反推出 p 是 int 指针。

这种解方程的语法含义,才是 int *p1, *p2;写法的由来。

同理,函数指针也是这样,int (*func)();
最早调用是必须写成 (*func)() 的,但是经过修改后,写 func() 也可以了。

但是本意是"解方程"这种思想。

后来C++的加入,迫使C的规矩出现了一些变化。

但是不论如何,建议用自己最熟悉的就行。

而笔者本人是习惯了int* p; 这种写法。

补充

不管是哪种方式,有一个通用的方法可以快速区分到底是"指针"还是"普通变量"——方法就是,看这个变量前面有没有 * ,如果有 * 就代表它是指针,如果没有 * ,那就它就是普通的变量。

int* p;    // p 前面有*,所以是指针
int *p1,*p2, p3;    // p1 前面有*,p2前面有*,p3前面没有*,所以p1,p2是指针,而p3是普通变量

OK,就补充这么多,如果有什么错误的地方,欢迎小伙伴们的指正。

STM32F103C8T6+A4988驱动42步进电机全流程(附接线图+代码解析) 本文详细介绍了使用STM32F103C8T6单片机与A4988驱动模块控制42步进电机的完整流程。内容涵盖硬件接线图解析、电流设置、GPIO驱动代码编写以及细分控制等核心实践,旨在帮助嵌入式开发者和DIY爱好者快速实现精准运动控制,适用于3D打印机、CNC等需要精密定位的项目。 阅读详情

相关推荐

PRIDE PPP-AR软件实战:从ZTD解算到PWV反演的全流程避坑指南

本文详细解析了使用PRIDE PPP-AR软件进行GNSS数据处理的全流程,重点涵盖从ZTD解算到PWV反演的关键步骤与精度评估。文章深入剖析了软件部署、数据准备、参数配置中的常见“坑点”,并提供了与IGS ZTD及ERA5产品进行交叉验证的实用方法,旨在帮助用户高效、准确地获取高精度大气可降水量产品。

p8q9r0的博客 605

Visual C++中*号位置和功能详细解说

Visual C++中*号的位置详细解说

荔园微风的博客 5032

RseQC实战指南:从安装到RNA-Seq数据质控全流程解析

本文提供了一份详尽的RseQC实战指南,涵盖从安装配置到RNA-Seq数据质控的全流程。文章重点解析了RseQC作为专业质控工具的核心价值,手把手指导如何通过Conda或pip完成安装,并深入讲解了bam_stat.py、geneBody_coverage.py等关键模块的使用方法与结果解读技巧,帮助用户有效评估RNA完整性、文库构建质量及链特异性,确保下游分析的可靠性。

weixin_29200741的博客 201

在c++中使用指针时,怎么判断指针名前面加不加*,后面用来赋值的 需不需要加& ????

 1、"*"是解地址符,"&"是取地址符2、指针在声明时需要以:int *ponter=nullptr;的形式声明,声明过后直接使用其变量名pointer,不改变内容的情况下无需添加"*"符3、当需要使用pointer(保存的是地址)里面的数据(内容)时,需要使用"*"符。4、以:int &ref=pointer;形式声明时,代表声明一个变量,名为ref并取其地址。然后把指针的地址...

ning的博客 2716

手把手教你搭建Howland电流源:从原理图到实测避坑指南(附Python数据分析)

本文详细介绍了Howland电流源的设计与实现,从原理图到实测避坑指南,涵盖电阻匹配、运放选择和PCB布局等关键环节。通过Python数据分析,展示了如何优化电路性能并解决常见问题,适合电子工程师和爱好者参考。

weixin_29291069的博客 632

【软考高项】五十一、常见必会的几种进度网络图(单代号、双代号、七格图、横道图)

软考高项计算题进度网络图画图介绍

有莘不破的博客 3万+

C++ 中的“&”、“*”、“.”、“->”、“:”和“::”运算符介绍

C++ 中的“&”、“*”、“.”、“->”、“:”和“::”运算符介绍

cnds123的专栏 3万+

从零开始学DAG:用dagitty软件快速构建因果图的5个步骤

本文为初学者提供了使用dagitty软件快速构建因果图的5个实用步骤。通过一个公共卫生研究实例,详细演示了如何从定义核心变量开始,逐步引入混杂、中介和碰撞变量,最终利用dagitty的自动分析功能识别最小充分调整集,从而科学指导研究设计与统计分析,有效提升因果推断的严谨性。

ii567的博客 799

剖析C/C++指针语法中*的三重含义

所以*的作用主要有三种,需要根据上下文理解其含义。

weixin_47712251的博客 1420

阿波罗开发板硬件架构与STM32模块化设计详解

嵌入式开发板的模块化设计是提升硬件复用性、降低迭代成本的关键技术路径。其核心在于底板与核心板的电气解耦与功能分层,依托STM32系列MCU(如F429/F767)的丰富外设资源与引脚复用能力,实现信号完整性、电源域隔离与热管理的系统级协同。该架构显著支撑工业HMI、智能家居网关、便携医疗设备等典型场景,尤其在RGB LCD驱动、QSPI Flash内存映射、多协议通信(CAN/RS485/USB)及低功耗唤醒(WK_UP按键)等工程实践中展现出高可靠性与易调试性。本文围绕阿波罗开发板展开深度解析,覆盖最小系

weixin_42510201的博客 64

基于STM32、HAL库的TCA9555PWR I/O扩展器驱动程序设计

define TCA9555_ADDR_BASE 0x20 // 基础地址 (A0=A1=A2=0)* @param direction: 方向 (0=输出, 1=输入)* @param direction: 方向 (0=输出, 1=输入)* @param polarity: 极性 (0=正常, 1=反转)* @param polarity: 极性 (0=正常, 1=反转)

corlin6688的博客 526

星号的秘密

1、乘法运算符 2、定义指针int *p = 0; 还是 int* p = 0;?后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int的指针型),相比而言,前面一种定义似乎是定义了*P这个奇怪的东西。但是后面一种写法会带来一个容易产生的误解:int* p1, p2; 这儿给人的感觉似乎是定义了两个指针型变量p1和p2,但是,事实上,这种直觉是错误的,正确的理解方式是in

keen的专栏 4475

maxim max96712+max96717调试笔记

mxxim max96712 和max96717调试笔记

libuping2023的博客 1万+

是int* p 还是 int *p

是int* p 还是 int *p? 作为一个有强迫症的初学者,是一定要搞个明白的,毕竟在看别人的代码时,写前者的多,写后者的不少,竟然还有些人一会儿写前者,一会儿写后者。 反正各家意见不一致,作为一个初学者,看了一堆帖子,有的贴子都掐架了,感觉公说公有理婆说婆有理……在一开始,我比较倾向于前者,因为我认为int*代表了一个类型,敲着敲着代码,我就比较倾向于后者了,再然后,我更倾向于后者了。 ...

韶光 2562

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Statistics and Machine Learning Toolbox

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

C/C++的指针、万能指针、常量指针和指针常量

C/C++的指针、万能指针、常量指针和指针常量

ULTRAmanTAROACE的博客 1356

深度学习工具包 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语言 指针入门最大的误区:int *p=&a;a的地址赋值给的是p不是*p

在学C语言的途中,不免会遇到很多难题。相信学C和C++的同学们对指针一定有所耳闻,它也是大家在日后学数据结构的基础。重点来了:此时的&a赋值给的是p!!!或者我们可以换以下写法,看的更为清晰。可以看出,这个写法将 int 与 * 连在一起写了,我们便可以理解为:声明一个变量p,这个变量p的类型是 int* (注意,是int*不是int),然后将a变量的地址赋值给了p变量,也即 “指针p指向a”。所以我们再来对比一下指针的几种赋值:此时会发现这两种除了写法不同以外,作用却是完全相同的。

m0_46745664的博客 9957

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C/C++函数指针调用:星号(*)的语法解析与工程实践

函数指针是C/C++编程中的核心概念,它本质上是一个存储函数入口地址的变量,通过类型信息(返回值与参数列表)确保类型安全。其原理基于函数名在表达式中的隐式转换(decay)特性,即函数名可自动转为指向该函数的指针,这为回调机制、策略模式等动态行为提供了基础。在工程实践中,函数指针的价值在于实现高内聚低耦合的设计,广泛应用于事件驱动、插件架构、状态机等场景。本文聚焦于一个具体而常见的工程细节:通过函数指针调用函数时,解引用操作符(*)的使用规范。针对这一主题,文章深入剖析了C/C++标准中的函数指针转换规则,

weixin_30599769的博客 492

深度长文教你彻底掌握C++/C指针(一):基石

一.基础C++或者C里面最容易让人糊涂应该是指针了,不管是初学者甚至是有经验的童鞋有时候在用指针的时候也会出现一些很隐蔽的错误. 指针本身就是一个很绕的概念,而指针又能够和很多的结构比如数组(二维数组),字符串,内存分配和管理等等一些联系起来变成更加绕的概念.所以基础不好的同学常常会犯一些很无厘头的错误,但是高手也会犯错误,而且更加隐蔽. 接下来所有的文章内容并不能够保证你能够完完全全避免开发中

谢小小XH 5万+

C/C++指针&智能指针一

本文主要讲解了指针的基础概念以及使用,通过这篇文章一定会增加你对指针的认识和理解。

weixin_73497355的博客 1322

C语言中星号的使用

C语言中星号的使用   1、乘法运算符   2、定义指针 int *p = 0; 还是 int* p = 0;? 后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int的指针型),相比而言,前面一种定义似乎是定义了*P这个奇怪的东西。但是后面一种写法会带来一个容易产生的误解: int* p1, p2; 这儿给人的感觉似乎是定义了两个指针型

塔山上的山 2955

如何解决C/C++指针使用的问题?

指针是一把双刃剑,用得好所向披靡,如果用的不好,则会让你的程序出现各种各样的问题,最终导致程序崩溃。 常常有人这么说,C/C++程序员大部分的BUG都是在处理由指针引起的BUG上,比如常见的内存问题、野指针等等。那我们应该如果避免出现指针使用上的问题呢? 不正确的指针声明方式 来看看如下的声明: int *pH1,pH2; 上面的声明本身没有错误,不过,可能跟我们想的不同,它把pH1声明为整数指针,而把pH2声明为整数。 我们都知道,指针声明和声明其他变量一样,唯一不同的一点就是要在变量前加 *。而上面

chen1415886044的博客 849

C/Cpp指针专题——多级指针

引言:在学习C/Cpp指针部分的时候,有许多地方是比较容易让人懵逼的,今天我们来讨论多级指针的话题 在进入今天的话题前,我们先来思考几个问题:如何定义一个指针来保存另一个变量的地址? 答案很明显 对应变量的数据类型 * 指针变量名 =&变量名(即在需要指向的变量类型基础上加个)* 例如: int a=10; int p=&a;//定义一个int类型的指针p指向a ;其中,号表示这是...

qq_23326451的博客 444

C/C++函数指针调用:加不加星号(*)的深度解析与工程实践

在C/C++编程中,函数指针是实现回调机制、动态行为和多态性的核心技术之一。其本质是一个存储函数内存地址的变量,允许程序在运行时动态选择要执行的代码路径。从编译原理角度看,函数名在表达式中会自动转换为指向该函数的指针,而对函数指针的解引用操作在标准中被定义为与原始指针等价,这为调用语法的灵活性提供了理论基础。在工程实践中,这种灵活性带来了两种常见的调用写法:直接调用如`func_ptr(args)`和解引用调用如`(*func_ptr)(args)`。虽然两者生成的机器码完全相同,但在代码可读性、团队协作和

weixin_33749242的博客 419

C++指针声明风格探秘:为么星号的位置不影响程序行为?

本文深入探讨了C++中int* p与int *p两种指针声明方式的语法等价性及其在实际开发中的应用。通过反汇编验证,两种声明方式生成的机器码完全一致,表明它们在编译器层面是等价的。文章还分析了不同声明风格在代码可读性和多变量声明中的差异,并提供了工业级开发规范建议,包括团队协作规范、复杂类型声明技巧和代码审查重点。此外,文章还解析了指针的底层内存布局和类型系统运作机制,并指出了常见误区及其解决方案。最后,总结了最佳实践,强调选择声明方式应遵循团队规范,并提供了提升代码可维护性的建议。

分享平时的学习心得和笔记 1197

C/C++指针

1、*的理解:*是一种操作,对指针类型的变量进行操作,对指定的内存地址进行读写 变量的地址理论上是整数,可以用int类型表示,为了突出强调它是一个内存地址,用了新的整数类型表示,即指针类型 char*:表示一个char型变量的地址 int*:表示一个int型变量的地址 XXX*表示XXX型变量的地址,XXX可以除了上面两种数据类型外可以是其它任何数据类型。XXX*作为一个整体使用。 ①因...

qq_20386411的博客 1913

《C/C++学习指南》语法篇—笔记 (八、指针)

《C/C++学习指南》语法篇—笔记 (八、指针)提要:变量与内存使用指针类型表示地址关于指针星号操作:按地址访问指针与数组 提要:变量与内存 内存用于存储数据,最小单元是字节(8bit),每个单元都有一个编号(地址:0x00000000~0xFFFFFFFF),地址是一个整数 变量大小(sizeof()返回变量大小),int型是4字节,变量的大小指它在内存中占了几个字节 变量地址就是该变量在内存中的位置。使用&取得该变量地址。 变量赋值:向内存写入数据。读变量的值,从内存中读取数据。 每个变量都有

weixin_42040046的博客 390
上一篇: 通过 Python 实现定时打开链接的功能
下一篇: 01_Java前世今生
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值