当前位置:网站首页>C语言静态变量static的分析
C语言静态变量static的分析
2022-08-04 05:31:00 【π指针】
对C语言静态变量static分析,解释了static为什么在局部变量里面定义的时候不会随着函数执行完毕而销毁,也稍微用解释了静态存储区和动态存储区的小知识
学习static前要先认识
了解什么是静态存储区和动态存储区。
静态存储区就是图中的:代码区(text代码区) 、全局区(bss段,data段,文字常量区)
动态存储区就是栈和堆
阅读下面的文章前,对于初学者要记住一个概念:全局区是在静态存储区的。
在c语言编译四个阶段,写好代码然后点击编译运行—>预编译–>编译—>汇编—>链接。在编译链接的阶段,就决定了把谁放在bbs段,谁放在data段。
在定义全局变量时,程序员没有人工初始化的,都初始化为0然后只能放在全局区的全局未初始化bss段,有初始化值的放在全局区的全局初始化数据data段。(字符串常量这些就肯定放在全局区里面的文字常量区了的,不是放在data段)。
在定义局部变量时候,分为auto,static,register三种类型,auto是普通的,我们经常写的这种,就放在栈区,调用执行完到就销毁了。register是存放在寄存器中的
static分析
全局/局部变量 和 static静态变量 之间存在的关系
在全局变量前面加一个static时,该变量就变成了全局静态变量,在局部变量前面加一个static时,改变量就变成了局部静态变量
在局部变量中添加static的分析
int main(){
static int a;
void add(){
static int i = 10;
i++;
printf("%d\n",i);
}
add();//11
add(); //12
return 0;
}
由此可见 在局部变量中,用static包裹的变量,就相当于把变量i放入了静态存储区中。可相当于一个全局变量来用了。
总结:当static加在局部变量时
- 延长了生命周期,一直到整个程序结束,才结束
- 变量存放在静态变量区,不初始化时候,会默认初始为0
在全局变量添加static的分析
本来就是全局变量了,加个static有什么用呢?可见这当然不是为了延长生命周期了。
//a.h文件
static int a;
int b = 10;
#include <stdio.h>
#include "a.h"//引入自定义的头文件
extern int a;
extern int b;
//b.c文件
int main(){
printf("%d\n",a);//没有
printf("%d\n",b);//10
return 0;
}
总结:当static加在了全局变量
- 不可以被其他文件访问,起了一个隐藏的作用
- 不会与其他文件重复名字的变量起冲突
- 提高了数据的安全性
边栏推荐
- LeetCode_Dec_2nd_Week
- [日常办公][杂项][vscode]tab space
- Deep Learning Theory - Initialization, Parameter Adjustment
- 【五一专属】阿里云ECS大测评#五一专属|向所有热爱分享的“技术劳动者”致敬#
- 文件编辑器
- MNIST Handwritten Digit Recognition - Lenet-5's First Commercial Grade Convolutional Neural Network
- Copy Siege Lions "sticky" to AI couplets
- 亚马逊云科技 Build On 2022 - AIot 第二季物联网专场实验心得
- LeetCode_Nov_1st_Week
- MOOSE平台使用入门攻略——如何运行官方教程的例子
猜你喜欢
TensorRT 5 初步认识
【论文阅读】SPANET: SPATIAL PYRAMID ATTENTION NETWORK FOR ENHANCED IMAGE RECOGNITION
CSDN spree -- college round table spree
Copy Siege Lions "sticky" to AI couplets
Fabric v1.1 环境搭建
第一章 绪论
度量学习(Metric learning)—— 基于分类损失函数(softmax、交叉熵、cosface、arcface)
Golang环境变量设置(二)--GOMODULE&GOPROXY
彻底删除MySQL教程
tensorRT教程——tensor RT OP理解(实现自定义层,搭建网络)
随机推荐
MVC自定义配置
IEEE802.X protocol suite
IEEE802.X协议族
典型CCN网络——efficientNet(2019-Google-已开源)
腾讯、网易纷纷出手,火到出圈的元宇宙到底是个啥?
Cut the hit pro subtitles export of essays
度量学习(Metric learning)—— 基于分类损失函数(softmax、交叉熵、cosface、arcface)
Tencent and NetEase have taken action one after another. What is the metaverse that is so popular that it is out of the circle?
LeetCode_Dec_2nd_Week
DRA821 环境搭建
深度学习理论——过拟合、欠拟合、正则化、优化器
通用解决端口占用问题
双向LSTM
中国联通、欧莱雅和钉钉都在争相打造的秘密武器?虚拟IP未来还有怎样的可能
Tensorflow/Pytorch安装(Anaconda环境下,无版本冲突,亲测有效)
MNIST手写数字识别 —— 图像分析法实现二分类
Object.requireNonNull 方法说明
关于DG(域泛化)领域的PCL方法的代码实例
第二章 STA相关概念
MNIST手写数字识别 —— Lenet-5首个商用级别卷积神经网络