C语言存储类别

1.作用域

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

  • 块作用域

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

  • 函数作用域

    可见范围是整个函数。

  • 函数原型作用域

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

  • 文件作用域

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

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

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

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

3.自动变量

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

auto int plox

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

猜你喜欢

转载自blog.csdn.net/dream_follower/article/details/80958311