static关键字

Static详解 函数

该关键字有两个做用第一隐藏第二修饰存储位置 spa

首先说明数据的存储方式,全局变量(函数外定义) 内存

栈变量(函数内定义)堆变量(malloc申请的变量) 作用域

静态存储区和动态存储区。

从变量存储位置看,可将变量存储区分为静态存储区和动态存储区 变量

内存静态存储区(全局数据区) 程序

①静态局部变量(函数内定义,static声明,本函数有效,下次调用保持上次值) im

②静态外部变量(函数外定义,static声明,本文件有效) 总结

③外部变量(即全局变量,文件外定义,使用时extern声明,本工程有效) 数据

内存动态存储区(栈区,除寄存器变量外) static

①自动变量(函数内定义,默认auto声明,函数内有效)

②形式参数(函数内有效)

CUP寄存器变量(register声明)

动态存储和静态存储

从变量存在的时间看,可将变量分为动态存储和静态存储(此处不强调存储位置,强调存在时间),静态存储是在程序运行整个时间内都存在,动态变量则是调用时在栈上临时分配,调用结束,变量消亡。

动态存储:

①自动变量(函数内定义,默认auto声明,函数内有效)

②形式参数(函数内有效)

③寄存器变量(register声明)

静态存储:

①静态局部变量(函数内定义,static声明,函数内有效,下次调用保持上次值)

②静态外部变量(函数外定义,static声明,本文件有效)

③外部变量(文件外定义,使用时extern声明,本工程有效)

局部变量和全局变量

从变量做用域看,将变量分为局部变量和全局变量。

局部变量:

①自动变量,即动态局部变量(函数内定义,默认auto声明)

②静态局部变量(函数内定义,static声明)

③寄存器变量

④形式参数能够声明为自动变量或寄存器变量

全局变量:

①静态外部变量(函数外定义,static声明)

②外部变量(文件外定义,使用时extern声明)

 

总结:全局变量、static声明的变量存储在全局数据区,局部变量存储在栈上,register变量存储在CPU寄存器中函数调用结束消亡。

做用于变量时,首先说明该变量只在该文件有效,其次说明该变量是静态变量,存储于全局数据,而且内容持久保持除非“人为”改变

全局数据区的变量默认值为0

做用于函数时,说明该函数只在本文件有效,即隐藏!

所以,static第一功能是隐藏,其次是存放在全局数据区内容保持。

相关文章
相关标签/搜索