当前位置:网站首页>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加在了全局变量
- 不可以被其他文件访问,起了一个隐藏的作用
- 不会与其他文件重复名字的变量起冲突
- 提高了数据的安全性
边栏推荐
- 剪映专业版字幕导出随笔
- fuser 使用—— YOLOV5内存溢出——kill nvidai-smi 无pid 的 GPU 进程
- 浅谈游戏音效测试点
- MNIST手写数字识别 —— 图像分析法实现二分类
- arm-2-基础阶段
- tmux概念和使用
- Machine Learning - Processing of Text Labels for Classification Problems (Feature Engineering)
- 通用解决端口占用问题
- CSDN大礼包--高校圆桌派大礼包
- (Navigation page) OpenStack-M version - manual construction of two nodes - with video from station B
猜你喜欢

【Copy攻城狮日志】飞浆学院强化学习7日打卡营-学习笔记

DRA821 环境搭建

Deep Learning Theory - Overfitting, Underfitting, Regularization, Optimizers

Chapter One Introduction

2020-03-27

安装MySQL的详细步骤

yoloV5 使用——训练速度慢,加速训练

Question 1000: Input two integers a and b, calculate the sum of a+b, this question is multiple sets of test data

通用解决端口占用问题

浅谈外挂常识和如何防御
随机推荐
题目1000:输入两个整数a和b,计算a+b的和,此题是多组测试数据
集合--LinkedList
MNIST手写数字识别 —— 基于Mindspore快速构建感知机实现十分类
通用解决端口占用问题
典型CCN网络——efficientNet(2019-Google-已开源)
多层LSTM
度量学习(Metric learning)—— 基于分类损失函数(softmax、交叉熵、cosface、arcface)
CAS无锁队列的实现
Copy Siege Lion's Annual "Battle" | Review 2020
FAREWARE ADDRESS
文件编辑器
tensorRT教程——使用tensorRT OP 搭建自己的网络
IEEE802.X protocol suite
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_22_Apr_4th_Week
"A minute" Copy siege lion log 】 【 run MindSpore LeNet model
2020-03-27
MNIST Handwritten Digit Recognition - Lenet-5's First Commercial Grade Convolutional Neural Network
Deep learning, "grain and grass" first--On the way to obtain data sets
FAREWARE ADDRESS