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

全局变量、静态全局变量、静态局部变量和普通局部变量的区别按存储区域分 全局变量 静态全局变量和静态局部变量都存放在内存的全局数据区 局部变量存放在内存的栈区按作用域分 1 全局变量在整个工程文件内都有效 2 静态全局变量只在定义它的文件内有效 3 静态局部变量只在定义它的函数内有效 且程序仅分配一次内存 函数返回后 该变量不会消失 局部变量在定义它的函数内有效 但是函数返回后失效 4 全局变量和静态变量如果没有手工初始化 则由编译

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

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

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

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

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

实例:

#include 
  
    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在这两个函数里的变化

更多精彩:

(1403条消息) Qt版本企业级界面_清风徐来Groot的博客-CSDN博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225718.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午8:42
下一篇 2026年3月17日 上午8:42


相关推荐

  • 9b9t服务器显示连接超时,在WebRTC中ICE连接失败

    9b9t服务器显示连接超时,在WebRTC中ICE连接失败我们正在尝试将浏览器(客户端)与aiortc库(服务器,发送单个视频流)连接起来。目前,连接已成功建立(onsignalingstatechange稳定)。但是,媒体连接从未建立,因为ICE连接失败。这两台主机在同一个局域网上,并且已经验证了直接连接。使用的STUN服务器是STUN.l。谷歌:19302.在服务器上的日志如下:DEBUG:asyncio:Usingselector:Epol…

    2022年5月22日
    47
  • Datawhale工作流自动化平台n8n入门教程(一):n8n简介与平台部署

    Datawhale工作流自动化平台n8n入门教程(一):n8n简介与平台部署

    2026年3月15日
    1
  • IOS版的MT4软件如何下载安装「建议收藏」

    IOS版的MT4软件如何下载安装「建议收藏」T4的版本总体来说还是比较全。包含了电脑版、安卓版/ios版,以及mac版。那么今天来重点讲解一下IOS版本的mt4如何下载。下载方式主要分以下2种:(1)在网页上获取安装包,通常mt4。yhtz。cc涵盖了多个版本的安装包,选择你需要的IOS即可下载到手机上后,然后就进入安装流程,点击下一步,下一步,总体来说,就是跟着安装提示走即可。(2)IOS属于手机版,IOS是可以在苹果应用商店下载的。下载流程就是:搜索Mt4,然后点击下载,一般会自动安装哦,就跟下载其他的客户端是一样的。下载安装好后

    2022年8月15日
    5
  • 实现PC视频播放最强画质教程( Potplayer播放器+MADVR插件)【转】

    实现PC视频播放最强画质教程( Potplayer播放器+MADVR插件)【转】转自:http://www.hangge.com/blog/cache/detail_1461.html一、MADVR介绍MADVR 是一款超强的视频插件,其配合高清播放软件,可以做到目前 PC 上播放高清视频的最强画质。MADVR 这款视频渲染器比市面上大多数播放器自带的渲染器有着更精确的颜色处理,更高质量的图像缩放缩放、以及更低的颜色错误率。这就使得它所渲染出来的视频在颜色上更…

    2025年11月15日
    3
  • java JSON转String

    java JSON转String1 示例中 json 的数据格式如下 2 获取 json 中每一个字符串的信息代码如下 importnet sf json JSONArray importnet sf json JSONObject publicclassJ publicstatic String args Stringstr t

    2026年3月26日
    3
  • linux进入命令行模式_pycharm的terminal

    linux进入命令行模式_pycharm的terminalPyCharm终端设置cmd

    2025年8月9日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号