`
standalone
  • 浏览: 611468 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

static全局变量与普通的全局变量有什么区别

    博客分类:
  • c++
 
阅读更多

static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
                              答 、全局变量(外部变量)的说明之前再冠以static
                              就构成了静态的全局变量。全局变量本身就是静态存储方式,
                              静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,
                              即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
                              从以上分析可以看出,
                              把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,
                              限制了它的使用范围。
                              static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
                              static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
                              static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
                              static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
                              程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于( 堆)中。

分享到:
评论
1 楼 standalone 2010-03-09  
全局变量与静态全局变量的主要区别是:作用域不同.
全局变量的作用域不仅在本文件中可以使用,在其他文件中也可以使用.但静态全局变量只能在本文件中使用.
如假设在1.cpp里定义了一个全局变量int g_val=1;一个静态全局变量int s_val=2
在2.cpp里可以正常使用g_val这个变量,但是不能访问s_val这个变量.
//1.cpp
#include<iostream>
using namespace std;
int g_val=1;
static int s_val=2;
int main()
{
return 0;
}
//2.cpp
extern int g_val;//要加extern关键字
extern int s_val;//虽然这个也可引用
void test()
{
g_val=0;
s_val=3;//这里访问出错.
}

静态局部变量与一般局部变量的区别就是:生存期不同
静态局部变量的生存期在程序运行期间都存在,下一次会引用上次访问的值.

#include<iostream>
using namespace std;
void fun()
{
int i=0;//下一次进来的时候这步仍执行,即i又变回0
static int val=0;//只初始化一次,下一次进来这个函数的时候,val的值是引用上次的值.而不是0
val++;
i++;
cout<<"静态局部变量:"<<val<<endl;
cout<<"一般局部变量:"<<i<<endl;
}
int main()
{
fun();
fun();
return 0;
}

相关推荐

    static全局变量与普通的全局变量的区别详细解析

    (1)static全局变量与普通的全局变量有什么区别?(2)static局部变量和普通局部变量有什么区别?(3)static函数与普通函数作用域有什么不同?(4)static函数与普通函数有什么区别? (1)static全局变量与普通的全局变量有...

    C语言面试题大汇总之华为面试题:1、局部变量能否和全局变量重名;2、如何引用一个已经定义过的全局变量;3、全局变量可不可以定义在可被多个.C文件包含的头文件中 为什么;4、语句for( ;1 ;)有什么问题 它是什么意思……

    局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。在同一个函数内可以定义多个同名的局部变量,每个局部变量的作用域就在那个循环体内。 二、extern关键字 extern...

    定义全局变量 变量 全局

    在MFC(Microsoft Foundation Classes)框架中,全局变量和函数的使用与标准C++有所不同,因为MFC工程通常由多个文件组成,需要一种方法来在这些文件之间共享数据和功能。这里将介绍两种在MFC工程中定义全局变量和...

    全局 局部变量以及static 变量区别

    ### 全局变量、局部变量及Static变量的区别详解 #### 一、基本概念与作用域 **全局变量(Global Variables)**: - **定义**: 在函数外部定义的变量。 - **作用域**: 全局变量在整个程序中都可被访问,只要在程序的...

    局部变量和全局变量总汇

    4. **static全局变量与普通的全局变量的区别?** - **区别**: - **作用域不同**:普通全局变量在整个源程序中都是有效的,而`static`全局变量只在其定义所在的源文件内有效。 - **生命周期不同**:普通全局变量...

    C++全局变量初始化的一点总结

    首先,全局变量的初始化分为两个阶段:静态初始化(static initialization)和动态初始化(dynamic initialization)。静态初始化发生在程序加载时,主要针对那些可以用常量表达的初始化,例如零初始化(zero ...

    CC++中的静态全局变量,静态局部变量,全局变量,局部变量的区别

    根据给定的文件信息,我们将深入探讨全局变量、局部变量、静态全局变量及静态局部变量之间的区别,以及`static`关键字在面向过程与面向对象编程中的不同应用。 ### 面向过程设计中的`static` #### 全局变量 全局...

    QT 使用全局变量的方法 - 郭小郭的专栏 - CSDN博客1

    4. **使用静态成员**:如果确实需要全局变量,优先考虑使用静态成员变量,因为它们与类相关联,提供了更好的封装。 5. **考虑使用单例模式**:对于复杂的全局状态,可以使用单例模式来创建一个全局访问点,同时保持...

    VB 全局变量举例

    与局部变量(仅在特定函数或子程序中有效)不同,全局变量可以在任何模块、窗体或标准模块中被调用,这使得它们在存储和传递数据时特别有用。下面将详细解释如何在VB中定义和使用全局变量,并给出一些实际的例子。 ...

    静态全局变量,静态局部变量,全局变量,局部变量

    - **全局变量**与**静态全局变量**的主要区别在于后者的作用范围受到限制。 - **局部变量**与**静态局部变量**的主要区别在于后者在整个程序运行期间都存在。 - **面向对象设计中的static**关键字用于定义类的静态...

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

    与普通全局变量相比,静态全局变量的作用域仍然为全局,但是其可见性仅限于其所在的源文件。这意味着即使在其他源文件中使用了相同的变量名,也不会发生冲突。静态全局变量在整个程序运行期间只初始化一次,并且在...

    [面试/笔试系列3]局部变量能否和全局变量重名

    #### 静态全局变量与普通全局变量 - **存储方式:** 两者均为静态存储方式。 - **作用域:** - 普通全局变量在整个源程序中有效。 - 静态全局变量仅在其定义的源文件内有效。 - **优势:** 静态全局变量可以避免...

    全局变量的使用

    9. **静态全局变量**:如果全局变量前加上`static`关键字,那么它将只在当前源文件内可见,这就是所谓的静态全局变量,它的生命周期仍然从程序开始到结束,但作用域限制在定义它的源文件内。 理解并合理使用全局...

    c_全局变量

    全局变量的存储类别可以是外部变量(extern)、静态变量(static)或自动变量(auto)。 在C语言中,变量的存储类别和作用域是息息相关的。变量的存储类别决定了变量的生命周期,而变量的作用域则确定了变量的可见...

    关于static及printf的格式和全局变量的使用

    在探讨C语言编程中,static关键字以及printf函数的格式化输出和全局变量的使用是三个密切相关且非常重要的概念。首先,static关键字在C语言中具有两种主要用途,一种用于修饰变量,另一种用于修饰函数。其次,printf...

    MFC全局变量的四种方法

    MFC提供了多种方式来实现全局变量,每种方法都有其特定的适用场景和优缺点。下面将详细介绍这四种方法。 ### 1. 常规C++全局变量 这是最基础的方法,适用于不涉及MFC特定类型的全局变量。在MFC应用的任何源文件中...

    C语言实现s-function源码,含全局变量

    本知识点将深入探讨如何用C语言来实现S-Function,并重点关注全局变量的使用和参数输入。 1. **S-Function基本结构**: S-Function的C代码通常包括初始化、模拟、输出和终止等阶段的函数。核心的函数有`sfuntmpl_...

    static,extern,全局变量的引用(c_c++)

    **静态全局变量**(`static`修饰的全局变量)与普通全局变量的主要区别在于它们的作用域不同。具体来说: - **普通全局变量**的作用域是整个源程序,这意味着在一个由多个源文件组成的程序中,该变量在所有源文件...

    php中static 静态变量和普通变量的区别

    php中static 静态变量和普通变量的区别 在变量的前面加上static 就构成了静态变量(static 变量)。 static变量和普通变量的区别在于非静态全局...static全局变量与普通全局变量区别:static全局变量只初使化一次,防止

Global site tag (gtag.js) - Google Analytics