当前位置:网站首页>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_22_Apr_2nd_Week
- target has libraries with conflicting names: libcrypto.a and libssl.a.
- MNIST Handwritten Digit Recognition - Image Analysis Method for Binary Classification
- The usefulness of bind() system call
- lstm pipeline 过程理解(输入输出)
- Shell脚本执行的三种方式
- No matching function for call to 'RCTBridgeModuleNameForClass'
- [开发杂项][调试]debug into kernel
- target has libraries with conflicting names: libcrypto.a and libssl.a.
- [开发杂项][编辑器][代码阅读]ctags&vim
猜你喜欢
随机推荐
Amazon Cloud Technology Build On-Amazon Neptune's Knowledge Graph-Based Recommendation Model Building Experience
安装Apache服务时出现的几个问题, AH00369,AH00526,AH00072....
MNIST手写数字识别 —— 基于Mindspore快速构建感知机实现十分类
The Unity of ML - agents interpret parameter Settings
强化学习中,Q-Learning与Sarsa的差别有多大?
arm学习-1-开发板
No matching function for call to ‘RCTBridgeModuleNameForClass‘
LeetCode_Nov_5th_Week
LeetCode_Dec_1st_Week
【论文阅读】SPANET: SPATIAL PYRAMID ATTENTION NETWORK FOR ENHANCED IMAGE RECOGNITION
A code example of the PCL method in the domain of DG (Domain Generalization)
Introduction to Convolutional Neural Networks
tmux concept and usage
target has libraries with conflicting names: libcrypto.a and libssl.a.
Stream API
【Copy攻城狮日志】“一分钟”跑通MindSpore的LeNet模型
安装MySQL的详细步骤
基于asp.net的法律援助平台的设计与实现(附项目链接)
如何成长为高级工程师?
Copy攻城狮的年度之“战”|回顾2020