static in c

Author Avatar
Aryb1n 8月 25, 2017

静态全局变量 & 静态局部变量

相同点就是, 静态的话, 就是放在数据段(bss or data)了, 不放在栈上边, 所以生存周期就是很长对吧

静态全局变量

全局变量就算是不静态, 也放在数据段, 对不对, 所以, 静态的全局变量这个静态要达到的效果是, 该变量只在本文件中可见, 不能extern到其他文件里

静态局部变量

既然是局部变量, 这个静态其实就像js里函数闭包一样, 想要维持一种状态, 利用了, 静态变量只初始化一次, 其实想一想, 我们通常说的静态就是编译时, 动态是运行时, 这里的只初始化一次, 大概就是这样子???一次性语句….

void count() {
    static int num = 0;
    num++;
    printf("%d\n", num);
}

静态成员方法 & 静态成员变量 (OOP)

静态方法可以认为是, 类方法…
静态方法不能访问不静态的成员变量, 因为传参的时候不会把this指针传给他

同理, 静态成员变量可以认为是类变量, 用来存储类级别的一些内容, 比如实例个数

这些, 类级的变量可以直接通过类名而无需通过实例来访问

一个要注意的地方是, 静态成员在类内只是申明的样子,

  1. 静态方法也要在类外定义
  2. 静态成员变量要在类外写一个定义(当然可以顺手初始化)

当然例外是const + static 可以在类内…忽略这个特例

静态函数(全局)

这个其实就和全局静态变量是一个道理, 是为了隐藏作用域, 该函数只能在本文件中使用, 这样子其他文件中就可以使用同名的函数了

因为函数里不能定义函数, 所以说到函数, 肯定是全局的了哦