C语言存储类别
程序员文章站
2022-07-15 10:39:17
...
1.作用域
在C语言中,变量的作用域可以是块作用域、函数作用域、函数原型作用域或文件作用域
-
块作用域
块是指用一堆花括号括起来的代码区域,定义在块中的变量具有块作用域,块作用域变量的可见范围是从定义处到包含该定义的块的模块结束。
-
函数作用域
可见范围是整个函数。
-
函数原型作用域
用于函数原型中的形参名,其作用范围是从形参定义处到原型声明结束,这也解释了为什么在定义函数的时候可以没有形参名,只需要有它的类型定义就行。
-
文件作用域
当变量定义在函数的外面时,具有文件作用域,其作用域是从它的定义处到该定义所在文件的末尾均可见,另外文件作用域变量也称为全局变量。
2.存储期
C对象的存储期有静态存储期、线程存储期、自动存储期、动态分配存储期.
- 静态存储期
如果变量具有静态存储期,那么它在程序的执行期间一直存在,文件作用域变量具有静态存储期,关键字static表明了其链接属性,而非存储期,static表示其具有静态存储期。
- 自动存储期
块作用域的变量具有自动存储期,当程序进入定义这些变量的块时,为这些变量分配内存,当推出这个块时,释放刚才为变量分配的内存,变长数组稍有不同,它们的存储期从声明处到块的末尾,而不是从块的开始到块的末尾
块作用域变量也能具有静态存出期,只需要在声明变量的时候,在声明前加上关键字static
- 静态存储期
3.自动变量
属于自动存储类别的变量具有自动存储周期、块作用域且无链接,默认情况下,声明在块中或函数头中的任何变量都属于自动存储类别,也可以显式使用关键字auto
auto int plox
自动变量不会初始化,必须要显式的初始化它,否则它的值是任意的。
4. 外部链接的静态变量 把变量的定义性声明放在所有函数的外面便创建了外部变量,也可以使用关键字extern进行声明,如果一个源代码文件使用的外部变量定义在另一个源代码文件中,则必须用extern声明该变量。
如果没有显式的初始化外部变量,它们自动初始化为0,但外部变量只能被初始化一次,且必须在定义该变量时进行。
上一篇: 【算法-数组】找出数组中只出现一次的数字
下一篇: 剑指offer之数组中只出现一次的数字