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第一功能是隐藏,其次是存放在全局数据区内容保持。