您的位置:首页 > 其它

static全局变量和普通全局变量区别?static局部变量和普通局部变量区别?static函数和普通函数区别

2017-08-21 20:05 465 查看
几者的区别从三个方面考虑:

1初始化时间

2 作用域

3 分配内存空间

static全局变量和普通全局变量区别:

区别:

  1.static全局变量编译是初始化,在main()函数之前初始化并且仅初始化一次;

  2.static全局变量限定了作用范围,仅在定义该变量的源文件中有效,由于静态全局变量的作用域局限于一个源文件内,即文件作用域,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。全局变量可以跨越多个源文件有效,当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量

相同点:都是全局作用域,静态存储方式

static局部变量和普通局部变量区别:

区别

  1.static局部变量只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。普通局部变量,只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。

  2.静态局部变量在静态存储区分配空间,局部变量在栈里分配空间。

相同点:两者都只有局部作用域

static函数和普通函数区别:

区别

  1.普通函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。好处:其他文件中可以定义相同名字的函数,不会发生冲突。

  2.普通函数在C++类中编译后带一个隐藏的this参数,而static函数不带。

相同的

全局变量、静态全局变量以及静态局部变量都会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它们与堆变量、堆变量的区别。

而局部变量在栈里分配空间

从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐