C语言详解关键字-static

【C语言】静态关键字static的用法(详解) 【C语言】静态关键字static的用法(详解 阅读详情

在C语言中,static是一个关键字,具有很多重要的用途,本文将对其进行详细介绍。
static关键字是用来修饰变量和函数的

  1. 修饰局部变量称为静态局部变量
  2. 修饰全局变量称为静态全局变量
  3. 修饰函数称为静态函数

静态变量

在C语言中,使用static关键字定义的局部变量属于静态变量,也称为内部链接变量。这些变量仅在定义它们的函数或文件中可见,不能被其他文件访问。静态变量的生命周期与程序相同,并且只会被初始化一次。静态变量通常用于在函数之间传递数据或保存在函数调用之间保留下来的数据。
image.png
上述代码中,a是一个静态局部变量,自从第一次调用函数a被初始化,以后每次调用函数都不会在初始化a,因为a在函数调用完后不会被销毁,而是会保留数据进行下一次函数调用,从而实现在函数之间传递数据或保存在函数调用之间保留下来的数据。

本质上是:在编译环节的编译阶段编译器就会为被 static 修饰的局部变量分配空间,所以C程序在运行的过程中会直接跳过 static 修饰的语句,也就是说,在第二次及以上甚至第一次调用 test 函数时 static int a = 0; 这条语句都不会被执行。

静态函数

在C语言中,使用static关键字定义的函数属于静态函数,也称为内部链接函数。这些函数仅在定义它们的文件中可见,不能被其他文件调用。静态函数通常用于使代码更加模块化和安全。
没有static修饰的函数在同一项目不同源文件中可见,可以被调用。
image.png
static关键字定义的函数属于静态函数,这些函数仅在定义它们的文件中可见,不能被其他文件调用。
image.png

静态全局变量

在C语言中,使用static关键字定义的全局变量叫静态全局变量,也称为内部链接全局变量。这些变量与静态变量类似,但它们的作用域是整个文件,而不是函数。静态全局变量的值只会被初始化一次,并且只能在定义它们的文件中访问。
没有static修饰的全局变量的作用域是整个项目,具有外部链接属性,但在不同源文件使用需要用关键字extern声明变量。
image.png
static修饰全局变量,改变了这个全局变量的链接属性,由外边链接属性变成了内部链接属性,这个静态变量只能在自己所在的源文件内部使用,不能在其他源文件内部使用了,感觉像是作用域变小了。
image.png

内存分布

内存大致可以分为三个区域:栈区,堆区和静态区,各区所存储的变量如下图所示。
注意:这只是一种粗略,简单的划分。
局部变量分配在栈区,全局变量分配在静态区。
ed0246ccb3a64de94c77718b86e92057.png

总结

1、 全局变量和函数是可以跨文件访问的,因为有一定规模的项目,一定是多文件的,多个文件之间,后续一定要进行数据“交互” ,如果不能跨文件访问,数据"交互"成本会非常高,所以C语言在设计的时候就规定了全局变量和函数可以跨文件访问(全局变量需要extern关键字声明)

2、 static 修饰局部变量的作用:改变局部变量的生命周期,本质上是改变了局部变量的存储位置,让局部变量不再是在栈区上开辟空间,而是直接在静态区上开辟空间,从而使得局部变量拥有和全局变量一样的生命周期,即随着整个程序生成和销毁。

3、static 修饰全局变量的作用:**改变了全局变量的外部链接属性(**可以在其他源文件内被访问),使其变成内部连接属性(只能在本文件内部被访问)。

4、static 修饰函数的作用是:改变了函数的外部链接属性(可以在其他源文件内被访问),使其变成内部连接属性(只能在本文件内部被访问)。

【JESD79-5之】8 AC & DC 输入测量标准(AC & DC Input Measurement Levels) 时钟被驱动到DRAM,可以通过L/RDIMM模块的RCD来实现,也可以通过U/SODIMM模块的主机来实现(图184)。接收机DQS(脉冲)输入电压灵敏度测试提供了在没有码间干扰(ISI),抖动(Rj, Dj, DCD)和串扰噪声的情况下测试接收机对不同输入电压的灵敏度的方法。接收机数据输入电压灵敏度测试提供了在没有符号间干扰(ISI),抖动(Rj, Dj, DCD)和串扰噪声的情况下测试接收机对不同输入电压的灵敏度的方法。 阅读详情

相关推荐

airodump-ng、aircrack-ng使用教程

wifi破解、airodump-ng、aircrack-ng脚本

ssmbyss的博客 2232

staic(静态)变量的作用

在C语言中,关键字static的意思是静态,它有三个明显的作用:首先,在函数体内,静态变量具有“记忆”功能,即一个被声明为静态的变量在这一函数被调用过程中其值维持不变。其次,在模块内(但在函数体外),它的作用域范围是有限制的,即如果一个变量被声明为静态的,那么该变量可以被模块内所有函数访问,但不能被模块外其它函数访问,它是一个本地的全局变量,而如果一个函数被声明为静态的,那么该函数与普通函数作用域

wangkechuang的专栏 1万+

0032期基于深度学习的大米识别-含数据集

083基于深度学习的手势识别小程序版本_含10多种模型包括alexnet、DenseNet、DLA、GoogleNet、Mobilenet、ResNet、ResNeXt、ShuffleNet、VGG、EfficientNet和Swin transformer等10多种模型。117nlp自然语言处理-文本情感分类-joy-sadness-anger-fear-love-surprise。运行02深度学习模型训练.py就会将txt文本中记录的训练集和验证集进行读取训练,训练好后会保存模型在本地。

grehtsfrs的博客 1506

static修饰的函数是可以被其他文件使用的

C语言和内存是紧密相关的,static主要是在编译链接阶段起作用,指导链接器将不同的函数按照链接脚本链接成可执行文件。一旦程序加载到内存中进行运行,那就没有什么static修饰的函数这种概念了,每个函数都一样,你能拿到函数指针就可以运行函数,这也是通过传递函数指针来调用static修饰的函数的原理。1.在文件中定义一个对外提供的函数,该函数在内部调用static修饰的函数,这就实现了间接调用static修饰的函数。2.将static修饰的函数的函数指针传递出去,其他文件可以通过函数指针进行调用。

dianqicyuyan的博客 1427

步进电机选型避雷手册:为什么你的42HS电机总丢步?从相数、电流到散热全面拆解

本文深入剖析了42HS步进电机在高速或重载下易出现丢步问题的根本原因。文章指出,选型时不应仅关注静态保持转矩,而需重点分析动态矩频曲线、合理匹配驱动器电流与细分数、进行准确的机械传动惯量计算,并有效管理系统共振与散热。通过全面拆解这些关键因素,为工程师提供了实用的选型避雷指南与系统优化方案。

weixin_29275257的博客 97

CAD二次开发(C#版):从零搭建开发环境与核心DLL引用指南

本文详细介绍了使用C#进行CAD二次开发的环境搭建与核心DLL引用指南,涵盖Visual Studio配置、AutoCAD插件项目创建、DLL引用技巧及调试方法。通过实战示例和常见问题排查,帮助开发者快速掌握CAD二次开发的核心技术,提升开发效率。

weixin_28837817的博客 728

C语言中某一个文件里定义的static变量,那么另一个文件能否读取这个变量?

静态局部变量和作用域和局部变量一样,不过生存周期不一样,局部变量在定义局部变量的函数调用完之后就从内存中释放其值,而静态局部变量不释放,等整个程序全部执行结束后才会从内存中释放。(b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。static不是允许修改,你估计和const搞混了,static表示静态存储,直到整个程序结束变量值才会从存储区释放,静态变量又分为全局静态变量和局部静态变量,

qq_47146145的博客 1279

【目标检测-YOLO】YOLOv5-v5.0-yolov5s网络架构详解(第一篇)

源码:GitHub - ultralytics/yolov5 at v5.0 由于YOLO v5 代码库在持续更新,如上图,有多个版本,每个版本的网络结构不尽相同。以下内容以 v5.0 为准,网络结构选用 yolov5s。 为了方便画图和理解网络结构,选用可视化工具:Netron 网页版进行可视化, 然后使用PPT作图。 在Releases · ultralytics/yolov5 · GitHub找到 v5.0中的Assets 中的yolov5s.pt并下载该权重。 下图为直接......

博观约取,厚积薄发 2万+

C语言 Static关键字的作用详解

1.当static修时局部变量时,变量只能被初始化一次,且static静态局部变量,其生命周期为整个进程,直到程序结束。对于第一段代码来说,它循环5次,每次调用一下fun()函数,而fun()函数每次进去的时候,x的值都为0,所以,当x++后,每次输出的值都为1。当fun()函数未被static修饰时,在 源.cpp 中可以正常执行 test.cpp 中的 fun() 函数,程序正常运行。static对x 只定义一次,x的值不会随着fun()这个函数的结束而被释放掉,直到程序结束,它的生命周期才结束。

weixin_63178060的博客 3045

2025华为OD面试手撕代码真题目录、八股文真题目录以及面试技巧

1. **华为OD面试技术面准备指南** 2. **华为OD面试技术面常见问题解答** 3. **华为OD面试技术面经验分享** 4. **华为OD面试技术面注意事项** 5. **华为OD面试技术面攻略** 6. **华为OD面试技术面模拟题目与解析** 7. **华为OD面试技术面知识点梳理** 8. **华为OD面试技术面常考**

算法大师! 3万+

C# 与欧姆龙 PLC 实战:通过 Ethernet/IP 协议进行设备控制与监控

本文介绍了如何通过C#和Ethernet/IP协议实现与欧姆龙PLC的通信。Ethernet/IP是基于以太网的工业协议,适用于工业设备间的实时数据交换。文章详细讲解了使用EthernetIPSharp库建立连接、读写数据的步骤,并提供了示例代码。此外,还探讨了实时监控、报警系统等高级功能,为工业自动化控制系统开发提供了实用指导。该方法简化了PLC通信开发,提高了系统可靠性和智能化程度。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 811

static修饰的函数能不能在其它文件里使用

大萨达

weixin_42031299的博客 8990

openpi 入门教程(一)安装、训练、微调与推理

OpenPI是由物理智能团队发布的机器人开源模型和软件包,包含两种主要模型:基于流的扩散视觉-语言-动作模型(VLA)的π₀模型和基于FAST动作标记器的自回归VLA的π₀-FAST模型。这些模型已在超过10,000小时的机器人数据上进行了预训练,并提供了基础模型检查点,支持开箱即用或根据用户数据集进行微调。OpenPI的实验性质意味着它可能不适用于所有平台,但鼓励研究人员和从业者进行创造性实验。运行这些模型需要至少具备NVIDIA GPU,推荐使用RTX 4090或更高规格的显卡。OpenPI支持在Ubu

2506_90492529的博客 5107

C语言之static关键字详解

static,英文意思静态的,作为C语言常用关键字中一个很重要的关键字,其用法多样且比较难以理解,本篇博客将带你详细了解掌握关键词static的用法......

weixin_62604754的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【C语言】static关键字详解

C/C++中static关键字

weixin_59511824的博客 3688

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C语言中 static 关键字详解

/ 输出: 函数调用次数: 1, 全局计数器: 1。// 输出: 函数调用次数: 2, 全局计数器: 2。// 输出: 函数调用次数: 3, 全局计数器: 3。printf("私有变量值: %d\n", file_private_var);

2401_86312340的博客 1361

深度学习工具包 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语言中staic关键字很简单,简单到你的任何一个项目中可以不写一个staic关键字也是没有问题的。写这篇章主要是一下自己的staic的理解和应用,当然在章开头依旧要照本宣科简述一下static关键字。 1、简述 static关键字在嵌入式C语言当中很简单,它有三个作用: 作用一:在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 void test1(void) { unsigned char a; static unsigned char b; … ...

人生一路,点滴记录 4864

C 语言 static 关键字详解

C 语言 static 关键字详解

嘻嘻爱编码的博客 3601

【C语言】static 关键字详解

关键字在C语言中具有多个作用,主要用于控制变量的生命周期、作用域和存储类。理解 关键字的用途对于编写高效和可靠的代码非常重要。以下是对 关键字的详细讲解,包括其用途、示例和注意事项。 关键字可以用于变量和函数,具有不同的效果: 变量在函数调用之间保持其值,这与局部变量不同,后者在每次函数调用时会被重新初始化。代码语言:cAI代码解释 解释: 全局变量只能在定义它的源文件中访问,其他源文件不能引用或修改它。file1.c代码语言:cAI代码解释 file2.c代码语言:cAI代码解释 解释:

2509_93923299的博客 858

【C语言】详解static和extern关键字

在本文中,介绍了变量的作用域和生命周期,还说明了static和extern两个关键字以及它们如何使用。

tianxiawushanu的博客 1658

C语言 一问详解static关键字

摘要:本文深入解析C语言中static关键字的三种用法:修饰局部变量、全局变量和函数。静态局部变量在程序加载时初始化,生命周期随进程;静态全局变量和函数具有内部链接属性,仅限当前文件使用。文章还对比了C++中static的不同实现,指出C++允许运行时初始化静态局部变量,并解释了编译器通过隐藏标志变量实现的延迟初始化机制。最后强调static的本质是改变链接属性,从外部链接转为内部链接

yuzhaokangcode的博客 875

【C语言】关键字static详解

C 与 static static 是 C 语言中的关键字, 其基本用法主要有两种:一是修饰局部变量,二是修饰全局变量和函数。但仅从字面意思去理解static,是远远不够的,static 还有其更深层次的意义,恰当使用static不仅有利于程序的安全性和可维护性,同时也是一种良好的代码风格。 一、static的基本用法 二、 三、static有什么用static的作用 - MainTao - 博客园 ...

Fulllll的博客 6745

C 语言常用关键字详解:static、const、volatile

在 C 语言中,staticconst和volatilestatic用于控制变量或函数的作用域和生命周期,确保它们不会被意外修改或访问。const用于修饰变量、指针或函数参数,表示它们的值在程序运行期间不可修改。volatile用于防止编译器优化,确保每次访问变量时都读取最新的值,尤其在硬件编程或多线程环境中非常有用。掌握这些关键字的使用方法,将有助于编写更高效、稳定和易于维护的 C 语言代码。

嵌入式修炼师的博客 1501

c语言中static关键字用法详解

概述 static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。 但是对于c语言初学者,static由于使用灵活,并不容易掌握。本文就static在c语言中的应用进行总结,供参考使用。错漏之处,请不吝指正。 在程序中使用static 变量 1. 局部变量 普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰...

guotianqing的博客 71万+

C语言static关键字技术详解

在C语言中,关键字用于声明变量或函数为静态的,即其生命周期和作用域仅限于当前文件。关键字在编程中扮演着重要的角色,它可以帮助我们提高代码的性能和可维护性。本文将深入探讨关键字的工作原理,并解释其背后的技术细节。文章将分为三个部分,本部分将详细介绍的基本概念和原理。关键字用于声明变量或函数为静态的,即其生命周期和作用域仅限于当前文件。这意味着在文件外,其他文件无法访问这些静态变量或函数。在C语言中,我们可以使用关键字来声明静态变量。这可以通过在变量声明前加上来实现,如下所示: 在这个例子中,是一个静态变量

极客代码 1644

C 语言中 static 关键字详解

本文介绍 C 语言中 static 关键字的用法,其核心是控制作用域与延长存储期,可修饰变量(局部、全局)和函数。静态局部变量存于数据段 /.bss段,生命周期同程序,仅函数内可见,仅初始化 1 次且保留上次值;静态全局变量仅当前.c文件可见,避免跨文件命名冲突;静态函数同样仅当前.c文件可调用,防命名冲突。三者存储期均与程序一致,通过控制访问范围实现模块化编程,减少冲突。

weixin_73308349的博客 544
下一篇: 【C语言】getchar()函数和scanf()函数的使用
岸边露伴'
博客等级 码龄3年 2粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值