当前位置:网站首页>C语言静态变量static
C语言静态变量static
2022-07-31 05:17: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加在了全局变量
- 不可以被其他文件访问,起了一个隐藏的作用
- 不会与其他文件重复名字的变量起冲突
- 提高了数据的安全性
边栏推荐
- wangeditor编辑器内容传至后台服务器存储
- 四种常见的POST提交数据方式
- Pytorch study notes 7 - processing input of multi-dimensional features
- Tensorflow——演示
- DSPE-PEG-Biotin,CAS:385437-57-0,磷脂-聚乙二醇-生物素可延长循环半衰期
- RuntimeError: CUDA error: no kernel image is available for execution on the device问题记录
- Tensorflow——demo
- 【Rhapsody学习笔记】2:Count Down
- Tensorflow related list
- 自己设置的私密文件,在哪找
猜你喜欢
Pytorch study notes 7 - processing input of multi-dimensional features
Introduction to CLS-PEG-FITC Fluorescein-PEG-CLS Cholesterol-PEG-Fluorescein
学习JDBC之获取数据库连接的方式
MW:3400 4-Arm PEG-DSPE 四臂-聚乙二醇-磷脂一种饱和的18碳磷脂
Embedding cutting-edge understanding
CAS:1403744-37-5 DSPE-PEG-FA 科研实验用磷脂-聚乙二醇-叶酸
mysql 事务原理详解
机器学习和深度学习概述
Log jar package conflict, and its solution
Phospholipids-Polyethylene Glycol-Active Esters for Scientific Research DSPE-PEG-NHS CAS: 1445723-73-8
随机推荐
应用usb_cam同时打开多个摄像头方法
Cholesterol-PEG-DBCO 胆固醇-聚乙二醇-二苯基环辛炔化学试剂
DC-CDN学习笔记
Pytorch Daily Practice - Predicting Surviving Passengers on the Titanic
Sourcery插件(自动提升代码质量)
MW:3400 4-Arm PEG-DSPE 四臂-聚乙二醇-磷脂一种饱和的18碳磷脂
科学研究用磷脂-聚乙二醇-活性酯 DSPE-PEG-NHS CAS:1445723-73-8
Learn how to get a database connection with JDBC
Word vector - demo
钉钉企业内部-H5微应用开发
评估机器学习模型-摘抄
Wangeditor rich text editor to upload pictures and solve cross-domain problems
pyspark.ml特征变换模块
ROS 之订阅多个topic时间同步问题
IDEA概述和安装及调试
mysql 事务原理详解
拒绝采样小记
会话和饼干,令牌
mPEG-DSPE 178744-28-0 Methoxy-polyethylene glycol-phosphatidylethanolamine linear PEG phospholipids
用pytorch里的children方法自定义网络