static局部变量与全局变量的区别(C语言静态局部变量和全局变量有什么区别,不都是在整个程序中都有效吗希望能举个简单的例子,谢谢啦)

:暂无数据 2026-09-22 21:50:07 :1

static局部变量与全局变量的区别(C语言静态局部变量和全局变量有什么区别,不都是在整个程序中都有效吗希望能举个简单的例子,谢谢啦)

本篇文章给大家谈谈static局部变量与全局变量的区别,以及C语言静态局部变量和全局变量有什么区别,不都是在整个程序中都有效吗希望能举个简单的例子,谢谢啦对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录

C语言静态局部变量和全局变量有什么区别,不都是在整个程序中都有效吗希望能举个简单的例子,谢谢啦

按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区
按作用域分:全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。
全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。
代码如下:
//test.cpp
#include 《iostream.h》
extern int a;//变量声明,不是定义
static int b=5;
void func1()
{
cout 《 《b 《 《endl 《 《a 《 《endl;//结果为5
}
//main.cpp
int a;
int b=10;
void func2()
{
static int i;
i++;
cout 《 《i 《 《endl;
}
void func1();
void main()
{
a=20;
func1();
func2();
func2();
}
输出结果为
5
20
1
2

全局变量和静态局部变量有什么区别

虽然之前在编程时对这四个“变量”就有不少困惑,但一直没去细究,前两天在联想的笔试题中看到了这样一道题,貌似知道它们的区别却又不能说出其中的原理,今天决定将其弄清楚。
局部变量:在一个函数中或复合语句中定义的变量,在动态存储区分配存储单元,在调用时动态分配,在函数或复合语句结束时自动释放;
静态局部变量:在一个函数中定义局部变量时,若加上static声明,则此变量为静态局部变量,在静态存储区分配存储单元,在程序运行期间都不释放;静态局部变量只能在该函数中使用;静态局部变量在编译时赋值(若在定义时未进行赋值处理,则默认赋值为0(对数值型变量)或空字符(对字符型变量));静态局部变量在函数调用结束后不自动释放,保留函数调用结束后的值;
全局变量:在函数外定义的变量称为全局变量;全局变量在静态存储区分配存储单元,在程序运行期间都不释放,在文件中的函数均可调用该全局变量,其他文件内的函数调用全局变量,需加extern声明;
静态全局变量:在函数外定义变量时,若加上static声明,则此变量为静态全局变量;静态全局变量在静态存储区分配存储单元,在程序运行期间都不释放,静态全局变量在编译时赋值(若在定义时未进行赋值处理,则默认赋值为0(对数值型变量)或空字符(对字符型变量));只能在当前文件中使用;
参考谭浩强的《C程序设计第二版》P180,可从三个方面对以上四种变量进行区分:

C#静态全局变量和静态局部变量有什么区别

生命周期和作用域不一样,全局变量拥有全局生命周期,也就是说这段程序不管什么地方都可以引用;局部变量的话只有在定义的那段代码或者类或者方法内引用,一旦这个方法或者类运行结束,那么这个变量就销毁了

C语言,全局变量和局部变量有什么区别

全局变量就是整个源程序都有效的变量;而局部变量会在其所属的函数或循环等结束后消亡。整个程序都要用的变量定义全局变量,如果就是某个函数用的话,就定义局部变量,以便其他函数可以重新定义同名变量来使用。 要是都用全局变量,那遇到大程序时,程序是由不同人分别编各自的模块或函数,不能避免定义同名变量,到时就会冲突。

静态变量和局部变量和全局变量的区别

1.从作用域看:
C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:
全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。
1》全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。
2》静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
3》局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
4》静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
2.从分配内存空间看:
1》全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间
2》全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
1)全局变量、静态全局变量以及静态局部变量都会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它们与堆变量、堆变量的区别。
2)静态变量(包括静态局部变量和静态全局变量)用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。
Tips:
A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

静态局部变量又和静态全局变量又有何区别

静态局部变量一般是放在函数里面,只有当函数运行的时候才会修改该变量的值,而且下次运行这个值还是上次运行留下得值,不会因为函数退出而归0,所以很多时候会用这个变量来计算函数的运行次数。
静态全局变量如果放在类里面的话,那么所有该类生成的对象可以共用该值,每个类对象都能访问而且新生成的类获得该变量的值为之前所有对象对该对象操作的值,比如A类,有三个对象a,b, 对象a将该值改为1,b将该值改为2, 那么生成c对象的时候该值就是3, 所以很多程序会创建一个来看new出来了多少对象。

关于本次static局部变量与全局变量的区别和C语言静态局部变量和全局变量有什么区别,不都是在整个程序中都有效吗希望能举个简单的例子,谢谢啦的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

static局部变量与全局变量的区别(C语言静态局部变量和全局变量有什么区别,不都是在整个程序中都有效吗希望能举个简单的例子,谢谢啦)

本文编辑:admin

更多文章:


force-unicode-font是什么意思?ღ᭄ꦿ这些特殊字是怎么来的

force-unicode-font是什么意思?ღ᭄ꦿ这些特殊字是怎么来的

各位老铁们好,相信很多人对万国码翻译都不是特别的了解,因此呢,今天就来为大家分享下关于万国码翻译以及force-unicode-font是什么意思的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月27日 23:50

java重载和覆盖的定义(java中方法重载和重写的区别和定义)

java重载和覆盖的定义(java中方法重载和重写的区别和定义)

这篇文章给大家聊聊关于java重载和覆盖的定义,以及java中方法重载和重写的区别和定义对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年9月27日 22:50

变幻金刚魔方教程图解(变幻金刚魔方的最后一步,研究了很长时间就是搞不 出来,能教教我吗)

变幻金刚魔方教程图解(变幻金刚魔方的最后一步,研究了很长时间就是搞不 出来,能教教我吗)

其实变幻金刚魔方教程图解的问题并不复杂,但是又很多的朋友都不太了解变幻金刚魔方的最后一步,研究了很长时间就是搞不 出来,能教教我吗,因此呢,今天小编就来为大家分享变幻金刚魔方教程图解的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题

2026年9月27日 21:00

怎样使用dreamweaver(怎么用dreamweaver制作网页如何用dreamweaver制作网页)

怎样使用dreamweaver(怎么用dreamweaver制作网页如何用dreamweaver制作网页)

本篇文章给大家谈谈怎样使用dreamweaver,以及怎么用dreamweaver制作网页如何用dreamweaver制作网页对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月27日 20:40

css提交按钮怎么写(html:submit能加css样式吗)

css提交按钮怎么写(html:submit能加css样式吗)

本篇文章给大家谈谈css提交按钮怎么写,以及html:submit能加css样式吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月27日 19:20

中国软件开源创新(开源三维软件有哪些如何选择最合适企业的)

中国软件开源创新(开源三维软件有哪些如何选择最合适企业的)

其实中国软件开源创新的问题并不复杂,但是又很多的朋友都不太了解开源三维软件有哪些如何选择最合适企业的,因此呢,今天小编就来为大家分享中国软件开源创新的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年9月27日 17:20

雨崩近年危险事件调查(下雨好长时间了,去雨崩的路况怎么样有刚从雨崩回来的吗)

雨崩近年危险事件调查(下雨好长时间了,去雨崩的路况怎么样有刚从雨崩回来的吗)

各位老铁们,大家好,今天由我来为大家分享雨崩近年危险事件调查,以及下雨好长时间了,去雨崩的路况怎么样有刚从雨崩回来的吗的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我

2026年9月27日 13:20

lvs是什么牌子(浪尖鱼竿是哪个品牌)

lvs是什么牌子(浪尖鱼竿是哪个品牌)

今天给各位分享浪尖鱼竿是哪个品牌的知识,其中也会对浪尖鱼竿是哪个品牌进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月27日 12:40

router配置路由(cisco路由交换配置)

router配置路由(cisco路由交换配置)

今天给各位分享cisco路由交换配置的知识,其中也会对cisco路由交换配置进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月27日 12:00

shell脚本substr(SHELL脚本对LINUX下指定文本文件的满足条件的行的特定位置字符串进行替换)

shell脚本substr(SHELL脚本对LINUX下指定文本文件的满足条件的行的特定位置字符串进行替换)

今天给各位分享SHELL脚本对LINUX下指定文本文件的满足条件的行的特定位置字符串进行替换的知识,其中也会对SHELL脚本对LINUX下指定文本文件的满足条件的行的特定位置字符串进行替换进行解释,如果能碰巧解决你现在面临的问题,别忘了关注

2026年9月27日 10:50

最近更新

telephone number缩写(telephone number和phone number有什么区别)
2026-09-28 01:10:02 浏览:0
热门文章

oppoa105k浏览器是哪个版本(OPPO A105K UC浏览器)
2026-07-22 22:30:02 浏览:10
dessert(dessert是什么意思)
2026-05-03 12:45:03 浏览:7
标签列表