`
justshare
  • 浏览: 105997 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

C系列: 全局变量与静态变量的区别

阅读更多
要讲清静态变量与全局变量的区别,要从四个方面:一为修饰符,二为存储地址,三为生命周期,四为外部可访问性。
修饰符:全局变量在源文件的函数外部声明(不含extern),但若其它源文件要调用这个变量,就需要通过extern关键字来引用一下。静态变量用static来修饰;
存储地址:两者都是存储在静态存储区,非堆栈上,它们与局部变量的存储分开;
生命周期:两者都是在程序编译时或程序装入时由系统自动分配的,程序结束时消亡;
外部可访问性:全局变量在整个程序的任何地方均可访问,而静态变量相当于面向对象中的私有变量,它的可访问性只限定于声明它的那个源文件,即作用域仅局限于本文件(静态函数也一样);

由于它们都是由系统分配的存储空间,所以它们的存储地址是固定的,但值是可变的。

静态变量的声明与调用
static int fun = 6;

void function_static1111(int i) {
	printf("%d\t", i);
	i += 10; 
}

void function_static2222(int i) {
	printf("%d\t", i);
}

int main(void) {
	function_static1111(1);
	function_static1111(2);
	function_static2222(4);
	function_static2222(5);
	printf("%d\n", fun); /*特立独行、不受前方干扰,老夫佩服*/
	fun = fun + 100; /*给它加100,看它还不心动*/  
	printf("%d\n", fun); /*终于变了,看来只要条件满足,也不是没有可能*/
}

/*Result:1 2 4 5 6 106*/

全局变量的声明与调用
/*
 * fileA.c
 */

int print = 100; /*声明全局变量并初始化,注意:不带extern修饰符*/

void printmessage() {
	printf("fileA.c printmessage\n");
}

/*
 * fileB.c
 */

void changePrint(int i) {
	extern int print;
	print = print * 10;
	printf("After Change print = %d\n", print);
}

void ghellops() {
	extern int print;  /*用extern修饰符来引用全局变量,默认值为100*/
        printf("Default : print = %d\n", print); /*打印默认值*/
	print = 2;      /*对全局变量重新赋值*/
	print = print + 1; /*对全局变量做+1操作*/
	printf("After Change : print = %d\n", print);
}

/*Default : print = 100
After Change : print = 3*/

后记:TNND,有的资料书害死人了,很不负责任,竞敢说C中用extern来声明全局变量,若不是老夫亲自验证,我还真相信呐。看来我的参考书有问题,很多语句模棱两可,翻译得很粗糙,害死我了BTW:谁有比较好的C入门资料?有的话就PM我,感激不尽
分享到:
评论

相关推荐

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

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

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

    全局变量、局部变量、静态全局变量、静态局部变量这四种变量类型,各自拥有不同的作用域和生命周期,它们之间的区别对于编写高效、可维护的代码至关重要。 ### 全局变量(Global Variable) 全局变量是在所有函数...

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

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

    全局变量、静态全局变量、静态局部变量和局部变量的区别2.pdf

    ### 全局变量、静态全局变量、静态局部变量与局部变量的区别 #### 一、概述 在编程领域,根据变量的作用域以及存储位置的不同,我们可以将变量大致分为四类:全局变量、静态全局变量、静态局部变量以及局部变量。这...

    静态库和动态库里的全局变量(或类的静态成员变量)共享和独立的问题

    在A中定义有全局变量X(或类的静态成员变量),则在动态库B中访问的X,与可执行程序C中访问的X是同一个变量还是两个不同的变量? 答案:是两个不同的变量。 2. 工程中包含动态库A,动态库B,可执行程序C。C依赖于A和...

    C++中类使用全局变量

    2. **初始化**:全局变量在程序开始时自动初始化,对于非静态全局变量,如果未指定初始值,它们将被初始化为零或垃圾值。对于静态全局变量,它们只在首次访问时初始化。 3. **作用域**:全局变量在整个程序中可见,...

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

    全局变量、局部变量及静态变量在作用域、存储位置、生命周期等方面有着明显的区别。正确理解和使用这些变量类型对于编写高质量、易于维护的代码至关重要。通过上述介绍,希望您能够更好地掌握这些基本概念,并能在...

    c_全局变量

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

    定义全局变量 变量 全局

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

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

    本文总结了C语言面试题大汇总之华为面试题,涵盖了局部变量、全局变量、extern关键字、for循环、while循环、静态变量、静态函数、内存分配等知识点。 一、局部变量和全局变量 局部变量可以与全局变量同名,在函数...

    全局变量、局部变量、静态变量即内存管理

    变量类型是编程语言中非常重要的一个概念,全局变量、局部变量、静态变量都是程序员经常使用的变量类型,但是这些变量类型之间的区别和联系却经常让人感到困惑。今天我们将详细地探讨这些变量类型之间的区别和联系,...

    局部变量、全局变量、堆、堆栈、静态和全局

    静态变量分为静态局部变量和静态全局变量。静态局部变量只在函数首次调用时初始化,之后每次调用函数时,其值会保留,不会被重置。静态全局变量只在定义它的源文件内可见,避免了全局变量的命名冲突,且其生命周期...

    C/C++ 跨文件共享全局变量Demo

    在C/C++编程中,跨文件共享全局变量是一项常见的需求,尤其在大型项目或模块化设计中。全局变量能够在程序的任何地方被访问,而跨文件共享则意味着这些变量可以在不同的源文件之间传递数据。本Demo将展示如何在C/C++...

    C语言咋项里面的全局变量与局部变量工程

    4. 名称空间:C语言没有真正的名称空间,但通过将全局变量声明为静态(static)可以限制其作用域,达到类似的效果。 5. 作用域规则:作用域规则决定了变量在哪里可以被访问。在C语言中,从定义点开始到当前代码块...

    c语言全局变量和局部变量问题汇总

    全局变量与局部变量是C语言中非常重要的概念,掌握它们的区别和使用场景对于提高编程技能至关重要。通过合理利用这两种变量,我们可以编写出更安全、更高效的代码。同时,正确处理变量的作用域可以帮助避免潜在的...

    C语言中如何使用全局变量示例

    在C语言中,全局变量是一种在整个程序中都可访问的变量。它们的作用域从定义它们的位置开始,直到程序结束。全局变量在程序的生命周期内一直存在,即使在函数调用结束后也不会被销毁。下面我们将详细探讨如何在C语言...

    VC中的全局变量.doc

    2. **全局变量的使用与注意事项** - **初始化**:全局变量默认在程序启动时自动初始化,如果在定义时没有赋值,整型变量会被初始化为0,非静态类对象则会调用默认构造函数。如果在`Globs.h`中已经初始化,那么在`...

    局部变量与全局变量区别,栈、堆和静态存储区的区别[借鉴].pdf

    局部变量与全局变量区别、栈、堆和静态存储区的区别 变量是编程语言中最基本的概念之一,它们可以存储不同的数据类型,并在程序中发挥着重要的作用。在 C++ 中,变量根据定义位置的不同,具有不同的作用域,可以...

    全局变量、局部变量、静态变量三者的区别.doc

    全局变量、局部变量、静态变量三者的区别。

    C语言学习之静态变量

    C语言中的`static`关键字用于声明静态变量,它在程序的不同上下文中具有不同的含义和作用。静态变量主要分为两类:静态局部变量和静态全局变量。 1. **静态局部变量**: - 静态局部变量使用`static`关键字在函数...

Global site tag (gtag.js) - Google Analytics