首页 > 试题广场 >

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

[问答题]
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
推荐

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

编辑于 2015-02-09 21:22:19 回复(0)
普通全局变量作用域是整合源程序,当一个源程序有多个源文件组成时,普通全局变量在各个源文件中都是有效的;而static全局变量则限制了其作用域,即只在定义该变量的原文件内的函数公用,同意源程序中的其他文件不可使用。
普通局部变量在所在的函数在每次调用时都会重新分配存储空间,函数结束后,就会回收存储空间;而static局部变量不会,他的值会始终保持着。
static函数只能在当前源文件中定义和使用,而对于可以在当前源文件中使用的普通函数,可以在一个头文件中说明,其他源文件要使用该普通函数时包含该头文件即可;
发表于 2015-09-03 19:11:22 回复(0)
这让我联想到non-local static object(非局部静态对象)的构造次序问题。
我们应该 avoid initialization order problems across translation units by replacing non-local static objects with local static objects.
发表于 2016-11-30 09:45:55 回复(0)
static 全局变量:只在定义它的源文件有效,其他源文件不可以直接访问
static局部变量:
                   静态局部变量存在静态存储区,在整个程序生命周期中存在。
                    静态局部变量只能被其作用域内的变量或者函数访问
                    静态全局变量如果没有被初始化,会被编译器自动赋值为 0
static函数:
               作用域为本源文件, 相当于面向对象中的private 函数
发表于 2016-07-25 21:01:47 回复(0)
static全局变量只需要初始化一次,防止被其他文件引用。
static局部变量只被初始化一次,下一次用上一次的结果。
static函数在内存中只有一份,普通函数在被调用中被复制
发表于 2018-04-03 09:59:17 回复(0)
1.static全局变量和普通全局变量的主要区别在于:static全局变量的作用域在本文件内(包括通过#include指令引入),而普通全局变量的作用域是整个工程。两者的共同之处是:已经初始化的被保存在data区,未初始化的保存在bss区。
2.static局部变量和普通局部变量的区别:①声明周期不同。static局部变量的声明周期是从声明处到程序结束运行,普通局部变量的声明周期只在其作用域内。②在内存中的位置不同。普通局部变量位于栈区,而static局部变量位于data区。两者的共同点是只能在其作用域内使用。
3.static函数和普通函数的区别:static函数又称为内部函数,其作用域是当前文件;普通函数又称为外部函数。
发表于 2016-08-30 20:24:44 回复(0)
<div> <span style="color:#333333;">static全局变量不能够给其他文件使用,</span><span style="color:#333333;">普通的全局变量可以。</span> </div> <div> <span style="color:#333333;">static局部变量只声明和分配存储空间一次,存储在全局区域,普通局部变量存储在栈区</span> </div> <div> <span style="color:#333333;">static函数是类方法,为类所拥有,普通函数为对象所拥有</span> </div>
发表于 2015-09-06 10:37:05 回复(0)
<span style="color:#333333;">全局变量(外部变量)的说明之前再冠以static&nbsp;就构成了静态的全局变量。全局变量本身就</span><br /> <span style="color:#333333;">是静态存储方式,&nbsp;静态全局变量当然也是静态存储方式。&nbsp;这两者在存储方式上并无不同</span><br /> <span style="color:#333333;">。这两者的区别虽在于非静态全局变量的作用域是整个源程序,&nbsp;当一个源程序由多个源文</span><br /> <span style="color:#333333;">件组成时,非静态的全局变量在各个源文件中都是有效的。&nbsp;而静态全局变量则限制了其作</span><br /> <span style="color:#333333;">用域,&nbsp;即只在定义该变量的源文件内有效,&nbsp;在同一源程序的其它源文件中不能使用它。</span><br /> <span style="color:#333333;">由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,&nbsp;因此可</span><br /> <span style="color:#333333;">以避免在其它源文件中引起错误。</span><br /> <span style="color:#333333;">从以上分析可以看出,&nbsp;把局部变量改变为静态变量后是改变了它的存储方式即改变了它的</span><br /> <span style="color:#333333;">生存期。把全局变量改变为静态变量后是改变了它的作用域,&nbsp;限制了它的使用范围。</span><br /> <span style="color:#333333;">static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明</span><br /> <span style="color:#333333;">为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以</span><br /> <span style="color:#333333;">外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件</span><br /> <br /> <br /> <span style="color:#333333;">static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其</span><br /> <span style="color:#333333;">他文件单元中被引用;</span><br /> <span style="color:#333333;">static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依</span><br /> <span style="color:#333333;">据上一次结果值;</span><br /> <span style="color:#333333;">static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调</span><br /> <span style="color:#333333;">用中维持一份拷贝</span>
发表于 2015-09-04 09:33:01 回复(0)