全局变量与全局静态变量的区别

全局变量与全局静态变量的区别

(a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。

(b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。

静态全局变量的作用:

(a)不必担心其它源文件使用相同变量名,彼此相互独立。

(b)在某源文件中定义的静态全局变量不能被其他源文件使用或修改。

例如:一个程序由两个源文件组成,其中在一个源文件中定义了“int n;”,在另一个源文件中定义了“static int n;”则程序给它们分别分配了不同的空间,两个值互不干扰。

例如:下面在file1.cpp中声明全局变量n,在file2.cpp中定义全局静态变量n。文件file1.cpp和file2.cpp单独编译都能通过,但连接时,file1.cpp中的变量n找不到定义,产生连接错误。

// file1.cpp

# include <iostream.h>

void fn()

extern int n;

void main()

{

n=20;

cout<<n<<endl;

fn();

}

// file2.cpp

# include <iostream.h>

static int n; // 默认初始化为0,注意此处定义的n 只能在file2.cpp中使用。

void fn()

{

n++;

cout<<n<<endl;

}

静态函数:使某个函数只在一个源文件中有效,不能被其他源文件所用。

定义:在函数前面加上static。

说明:函数的声明和定义默认情况下在整个程序中是extern的。

静态函数的效果:

(1)它允其他源文件建立并使用同名的函数,而不相互冲突。

(2) 声明为静态的函数不能被其他源文件所调用,因为它的名字不能得到。   
    

 

拙见:
静态变量和函数一般都局限于一个编译单元也就是.cpp文件中。
我想这是最主要的区别。   

时间: 2024-09-10 23:02:06

全局变量与全局静态变量的区别的相关文章

C/C++中全局变量和静态变量的区别

1. 全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量. 2. 全局变量.静态全局变量.静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的. 3. 全局变量.静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收空间. 4. 全局变量和静态变量都是保存在静态存储区中,生命期和程序一样,但是不同的是全局变量的作用域是整个项目,而静态全局变量是当前程序

ios-在objective-c中使用全局/静态变量

问题描述 在objective-c中使用全局/静态变量 保存用作方法的变量,然后在另一个方法中调用.实现时会不会用到全局/外部/静态变量?如果需要应该怎么用? 我试过用全局和静态,但是都失败了. 代码中用来保存newX 和 newY 的信息. -(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{... int newX = (int)(Button.

php实现全局静态变量类的一种实现方式

变量|静态 下面是一个全局静态变量类,类里面的函数都是静态函数, 注意里面的符号"&",他用来进行地址引用的.如果对引用方式不熟悉,请先参考php手册中的相关的章节. 另外本例是仿照php的pear类库中,pear.php中的静态全局error的方法实现的. <?class StatVar{  function &setInit(){    static $static = '';    return $static;  }  function set($key,

PHP static局部静态变量和全局静态变量总结

 使用静态局部变量的原因是它不能被外部使用,但是它的值依然在没此使用后保留.虽然使用全局变量可以实现相同的功能,但是它经常会造成意外 静态局部变量的特点:   1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它.倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值 2.静态局部变量只会初始化一次 3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式.即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变

PHP static局部静态变量和全局静态变量总结_php技巧

静态局部变量的特点: 1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它.倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值2.静态局部变量只会初始化一次3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式.即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量):静态变量的初始值为0.4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量.虽然用全局变量也可以达到上述目的

php中静态类与静态变量用法区别解析

 static是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了.   1. 创建对象$ob ject = new Class(),然后使用"->"调用:$ob ject->attribute/function,前提是该变量/方法可访问.   2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以,但是有前提条件. A. 如果是变量,需要该变量可访问. B. 如果

php中static静态类与static 静态变量用法区别

1. 创建对象$object = new Class(),然后使用"->"调用:$object->attribute/function,前提是该变量/方法可访问. 2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以.但是有前提条件: A. 如果是变量,需要该变量可访问. B. 如果是方法,除了该方法可访问外,还需要满足: b1) 如果是静态方法,没有特殊条件: b2) 如果是非静态方法,需要改方法中没有使用$this,即

asp.net中静态变量和非静态变量的区别

静态变量:静态变量使用 static 修饰符进行声明在所属类被装载时创建通过类进行访问所属类的所有实例的同一静态变量都是同一个值非静态变量:不带有 static 修饰符声明的变量称做非静态变量在类被实例化时创建通过对象进行访问同一个类的不同实例的同一非静态变量可以是不同的值示例: [复制到剪贴板]CODE: using System;using System.Collections.Generic;using System.Text;namespace Example01{    class P

struts2 指向映射文件信息的全局静态变量是谁!

问题描述 已知一个路径:/userInfo/load根据这个路径在内存中定位它所对应的Action有没有类似WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext()).getBean("")这样的方式读取Action配置对象在线急求.....