矛盾集合体——static的相关用法介绍
矛盾集合体——static的相关用法介绍
静态变量(static variable)这个名字听起来就很矛盾,又是“静态”但又是“变量”。说它是静态,是因为变量的位置是不动的(也就是说这样的变量从一次函数调用到下一次调用,计算机都记录着它们的值)那么这个固定的位置怎样限制变量的使用呢?
静态变量分两大类——
一、修饰变量时,
又可以分为局部和全局。
1、静态全局变量的作用域仅限于变量被定义的文件中,其他文件即使用extern(即外部存储类:具有外部链接的静态变量具有文件作用域、外部链接和静态存储时期)声明也没法使用他。
2、静态局部变量是在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数也用不了。
二、修饰函数时
此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
三、原理
当你声明了一个带static的变量,编译的时候会在内存的静态区开辟一个空间给这个变量。而不是像普通变量一样在函数的栈上面分配空间,因此静态变量不会因为当前函数返回而随着栈上面的变量一同销毁。所以static变量是始终存在于整个程序运行过程中的。
下次好好利用static保护你的变量吧!