全局变量、静态全局变量、静态局部变量和普通局部变量的区别

2023-11-16

按存储区域分全局变量静态全局变量静态局部变量都存放在内存的全局数据区局部变量存放在内存的栈区


作用域:  

1、全局变量在整个工程文件内都有效;

2、静态全局变量只在定义它的文件内有效;

3、静态局部变量只在定义它的函数内有效,且程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。
4、全局变量静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知

5、静态局部变量全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。

实例:

#include <stdio.h>

void func();//函数声明,主要是因为被调用的函数定义写在了main函数后面了

int n = 1; //全局变量

int  main(void)
{
    static int a; // 静态局部变量,但静态局部变量只在定义它的函数中可见,并且只初始化一次
    int b = -10; // 局部变量

    printf("main:   a=%d,   b=%d,   n=%d\n",a,b,n);

    b += 4;

    func();

    printf("main:   a=%d,   b=%d,   n=%d\n",a,b,n);
    n += 10;

    func();
    printf("main:   a=%d,   b=%d,   n=%d\n",a,b,n);

}
void func()
{
    static int a = 2; // 静态局部变量
    int b = 5; // 局部变量
    a += 2;
    n += 12;
    b += 5;
   printf("func:   a=%d,   b=%d,   n=%d\n",a,b,n);
}

运行结果: 

 结果分析:

 首先明确main函数和func函数里面都有静态局部变量a和局部变量b,由于它们的固有性质,它们都只在定义它的函数里有效,所以它们互不干扰,所以只要在本函数里分析即可,而全局变量n,在main和func函数里都有效,所以分析它的值应该考虑n在这两个函数里的变化

链接:https://blog.csdn.net/qq_39736982/article/details/82685277

转载:清风徐来_starthere全局变量、静态全局变量、静态局部变量和普通局部变量的区别

  • 静态存储区:存储全局变量和static变量,通常在程序编译期间已经分配好了。
    • BSS段:存放未初始化的static变量和全局变量
    • Data段:存放初始化过的static变量和全局变量
    • Text段:存储程序的二进制代码,程序代码区。  
  • 堆:程序运行时通过malloc申请的内存区存放在堆中,需要使用free来释放该内存空间,生存期在malloc和free之间。
  • 栈:执行函数时,函数的局部变量存储在栈中,执行结束后自动释放该内存区域,栈内存分配运算内置与处理器指令集中。

C++程序的内存布局与C程序布局类似,区别是C++不再区分全局变量和静态变量是否已经初始化,全部存储在静态存储区;另外堆中存放new/delete申请释放的资源,而malloc和free申请的资源存放在自由存储区。

参考博客:https://www.cnblogs.com/burningTheStar/p/8688515.html

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全局变量、静态全局变量、静态局部变量和普通局部变量的区别 的相关文章

随机推荐

  • zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso镜像下载

    链接 https pan baidu com s 17J tWrQcnAU QGG uWdcIwhttps pan baidu com s 17J tWrQcnAU QGG uWdcIw 提取码 zt88
  • 远程工作高效方法(几年前帖子,私密变公开后时间就变了)

    1 要和居住环境分开 我在阳台上办公 2 制订计划 每天写到纸上 贴在墙上 3 时间调整 以前上班时 有公司上班时间 先在要调整 比如 上午九点才开始工作 在家可以7点起床 困了再睡 4 每小时是工作内容 学习内容50分钟 视频教程1个或者
  • ubuntu中使用QT同时编译pcl和opencv出现error: field ‘pa ram_k_’ has incomplete type ‘flann::SearchParams’

    问题描述 ubuntu中使用QT同时编译opencv和pcl时出现如下错误 错误原因 pcl和opencv中均包含flann库产生冲突 解决办法 将flann目前更换为flann2或者其它名字 在更改目录后 其它关联引用文件也需要更改 涉及
  • kali apt update问题

    这两天使用卡里进行升级sudo apt update 错误无法升级 sudo apt update Get 1 http mirrors neusoft edu cn kali kali rolling InRelease 30 6 kB
  • 算法笔记-DTW动态时间规整

    算法笔记 DTW动态时间规整 简介 简单的例子 定义 讨论 约束条件 步模式 标准化 点与点的距离函数 具体应用场景 分类 点到点匹配 算法笔记 DTW动态时间规整 动态时间规整 规划 Dynamic Time Warping DTW 是一
  • 戴尔如何加装固态硬盘

    这是手册中有关固态硬盘的支持规格 您可以按照这个参数进行选购 G15 5511 支持两个 M 2 2230 2280 固态硬盘 M 2 2230 固态硬盘 PCIe 3 0 x4 NVMe 高达 1 TB M 2 2280 固态硬盘 PCI
  • 2023版软件测试学习路线图(超详细自学路线)

    送福利了 超详细的软件测试学习路线图来啦 2023版是首发哟 软件测试学习路线图分为9个阶段 包含 软件测试环境配置和管理 gt 软件测试数据管理与数据库测试 gt web前端测试技术 gt 通用软件测试技术 gt Python测试开发技术
  • python openpyxl 操作excel 插入行,列

    import openpyxl wb openpyxl load workbook D 村数据 实验 xlsx ws wb Sheet1 ws insert rows 3 插入行 ws insert cols 4 插入列 wb save D
  • JAVA【基础】 IDEA导入jar包的几种方式

    目录 获取想要添加的依赖 或者jar包 maven添加依赖 手动导入jar包 最后测试一下 是否添加成功 下面多图预警 获取想要添加的依赖 或者jar包 添加依赖 或者下载jar包 都可以去maven网站下载 进入 Maven仓库 http
  • 获取windows凭证管理器明文密码

    1 运行cmdkey list查看windows保存凭证 方法1 mimikaz mimikatz vault cred 2 利用powershell尝试获取 windows 普通凭据类型中的明文密码 powershell import F
  • IPv6基础

    IPv6 1 优势 无限 地址空间 地址长度为128 bit 海量的地址空间 满足物联网等新兴业务 有利于业务演进及扩展 层次化的地址结构 相较于IPv4地址 IPv6地址的分配更加规范 利于路由聚合 缩减IPv6路由表规模 路由快速查询
  • 数的划分(递归)

    整数划分是另外的问题 题目描述 Description 将整数n分成k份 且每份不能为空 任意两种划分方案不能相同 不考虑顺序 例如 n 7 k 3 下面三种划分方案被认为是相同的 7 1 1 5 7 1 5 1 7 5 1 1 问有多少种
  • 7z怎么解压linux,7z 常用解压命令

    用命令行来执行7z的极限压缩 就是如下的命令 C 01 MyApp 7 Zip 7z exe a t7z newPack 7z F 14 newWork 7z testDoc r mx 9 m0 LZMA2 ms 10m mf on mhc
  • cmd简单游戏代码_python简单游戏应用——剪刀石头布!

    我们的基础中的基础 在前几文中已经介绍完了 其他的知识用什么学什么就对了 接下来我们做款小游戏 纵观全文 先引入了一个函数 random 随机数 单用random 这个函数 会产生一个随机的实数 范围在 0 1 若是要从自定的范围取出一个
  • 在flask框架中,设置执行完视图函数后自动将数据提交回数据库

    设置执行完视图函数后自动提交操作回数据库 app config SQLALCHEMY COMMIT ON TEARDOWN True
  • pytorch GPU版本安装

    使用驱动精灵安装 参考 pytorch GPU版本安装 尘世猫的博客 CSDN博客 pytorchgpu版本 安装cuda 高版本的cuda是可以兼容低版本的cuda的 比如我的电脑支持cuda11 0 我就可以安装cuda10 0 cud
  • 汽车OBD初级开发入门

    汽车OBD初级开发入门 我所认识的OBD 从何开始学习OBD stm32的CAN总线 OBD的标准协议 我所认识的OBD 直观的从名称上来说是英文On Board Diagnostics的缩写 中文翻译为 车载诊断系统 书面上的解释就是处理
  • 太强了!100个Python算法实例.pdf

    常言道 算法才是编程的灵魂 不管是java python还是PHP 都跨不过算法这个门槛 算法确实不好学 但算法也是真必要 各大公司为了筛选人才 面试程序员的时候多多少少都会考察你的算法能力 学习算法无非这几种目的 学习基本编程语法和思想
  • Python VTK numpy数据3D可视化

    在Python的3D图像处理中 通常用numpy array来进行非常方便的计算或者转化 这里记录一下numpy数据的VTK可视化基本流程 包括面绘制 Surfase Rendering 和体绘制 Volume Rendering 除去数据
  • 全局变量、静态全局变量、静态局部变量和普通局部变量的区别

    按存储区域分 全局变量 静态全局变量和静态局部变量都存放在内存的全局数据区 局部变量存放在内存的栈区 按作用域分 1 全局变量在整个工程文件内都有效 2 静态全局变量只在定义它的文件内有效 3 静态局部变量只在定义它的函数内有效 且程序仅分