美文网首页C语言
C语言之变量作用域

C语言之变量作用域

作者: 鹿港小镇betterman | 来源:发表于2020-04-07 10:24 被阅读0次

全局变量:作用域整个工程,在使用的地方通过extern声明即可,存放于全局数据区,占用静态存储单元。

局部变量:作用于函数方法体内,函数执行结束就释放,存放于栈区。

全局静态变量:作用于当前类,在外部类不可使用,除非使用#include引入头文件,存放于全局数据区。

局部静态变量:作用于函数方法体内,函数执行结束不释放,存放于全局数据区。

全局静态存储区:分为 DATA 段和 BSS 段。DATA 段(全局初始化区)存放初始化的全局变量和静态变量;BSS 段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。

静态存储变量的优势:

优势:可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

关于static

(1)在修饰变量的时候,static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。

(2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。

(3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。static 修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存。初始化的时候自动初始化为 0。

(4)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用 static 修饰。

(5)考虑到数据安全性(当程序想要使用全局变量的时候应该先考虑使用 static)。

相关文章

  • C语言之内存讲解

    1 内存讲解 1.1 作用域 C语言变量的作用域分为:代码块、函数、文件作用域: 1.1.1 局部变量 局部变量(...

  • 2019-05-11(作用域)

    作用域: 作用域描述的程序中可以访问标识符的区域,在C语言变量的作用域可以是块作用域,函数作用域,函数原型的作用域...

  • C语言变量作用域

    希望你每天醒来都是阳光的,不会因为别人的几句话,几个表情和几个举止影响自己的心情,好好生活,总会遇见美好的事。。。...

  • [C] C语言static关键字总结

    《C和指针》第二版 P44-45 C语言的变量具有3种特征,作用域,链接属性,存储类型。4种作用域:文件作用域,...

  • C语言基础掌握之day5

    内存管理 作用域 一个C语言变量的作用域可以是代码块作用域,函数作用域或者文件作用域。代码块是{}之间的一段代码。...

  • 作用域、二义性和extern

    一个C语言变量的作用域可以是代码块 作用域,函数作用域或者文件作用域。代码块是{}之间的一段代码。 总结

  • 【C语言】内存管理-008

    第八章 内存管理 8.1 作用域 C语言变量的作用域分为: 代码块作用域(代码块是{}之间的一段代码) 函数作用域...

  • C - 作用域

    C - 作用域 一个 C 变量的作用域可以是: 块作用域 函数作用域 函数原型作用域 或 文件作用域 作用域描述程...

  • Block变量捕获

    变量分类 在了解变量捕获之前,我们首先了解一下C语言中变量的分类。C语言中变量分为三类 全局变量: 作用域在全局,...

  • C语言学习笔记

    C语言变量的作用域和生命周期: 自动变量 auto int a; (auto可以省略) 外部变量,外部函数 ex...

网友评论

    本文标题:C语言之变量作用域

    本文链接:https://www.haomeiwen.com/subject/rnlgphtx.html