欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言存储类别

程序员文章站 2022-07-15 10:39:17
...

1.作用域

在C语言中,变量的作用域可以是块作用域、函数作用域、函数原型作用域或文件作用域

  • 块作用域

    块是指用一堆花括号括起来的代码区域,定义在块中的变量具有块作用域,块作用域变量的可见范围是从定义处到包含该定义的块的模块结束。

  • 函数作用域

    可见范围是整个函数。

  • 函数原型作用域

    用于函数原型中的形参名,其作用范围是从形参定义处到原型声明结束,这也解释了为什么在定义函数的时候可以没有形参名,只需要有它的类型定义就行。

  • 文件作用域

    当变量定义在函数的外面时,具有文件作用域,其作用域是从它的定义处到该定义所在文件的末尾均可见,另外文件作用域变量也称为全局变量。

    2.存储期
    C对象的存储期有静态存储期、线程存储期、自动存储期、动态分配存储期.

    • 静态存储期
      如果变量具有静态存储期,那么它在程序的执行期间一直存在,文件作用域变量具有静态存储期,关键字static表明了其链接属性,而非存储期,static表示其具有静态存储期。
    • 自动存储期
      块作用域的变量具有自动存储期,当程序进入定义这些变量的块时,为这些变量分配内存,当推出这个块时,释放刚才为变量分配的内存,变长数组稍有不同,它们的存储期从声明处到块的末尾,而不是从块的开始到块的末尾

    块作用域变量也能具有静态存出期,只需要在声明变量的时候,在声明前加上关键字static

3.自动变量

属于自动存储类别的变量具有自动存储周期、块作用域且无链接,默认情况下,声明在块中或函数头中的任何变量都属于自动存储类别,也可以显式使用关键字auto

auto int plox

自动变量不会初始化,必须要显式的初始化它,否则它的值是任意的。
4. 外部链接的静态变量
把变量的定义性声明放在所有函数的外面便创建了外部变量,也可以使用关键字extern进行声明,如果一个源代码文件使用的外部变量定义在另一个源代码文件中,则必须用extern声明该变量。
如果没有显式的初始化外部变量,它们自动初始化为0,但外部变量只能被初始化一次,且必须在定义该变量时进行。

相关标签: 作用域