-
static修饰局部变量
作用域 :保持不变,范围都是代码块;
生命周期 :局部变量生命周期为代码块,static修饰后,局部变量生命周期为整个进程;
存储区域 :局部变量存储在栈,static修饰后存储在静态数据区;
void test_func() {
int i = 0;
static int j = 0;
printf("i : %d, j : %d\n", i, j);
i++;
j++;
}
int main() {
for (int t = 0; t < 5; t++) {
test_func();
}
}
输出如下:
i : 0, j : 0
i : 0, j : 1
i : 0, j : 2
i : 0, j : 3
i : 0, j : 4
-
static修饰全局变量
全局变量整个工程可见(通过extern),static修饰后,只有当前文件可见;
-
static修饰全局函数
同全局变量,static修饰后,只有当前文件可见;
-
static修饰成员变量和成员函数
static修饰的成员变量和成员函数,属于该类而不属于某个类对象,整个类仅有一份;
class Sample_C {
public:
Sample_C() {}
~Sample_C() {}
int m_k;
static int m_number;
};
int Sample_C::m_number = 0;
int main() {
Sample_C A;
Sample_C B;
printf("A.m_number : %d\n", A.m_number);
printf("B.m_number : %d\n", B.m_number);
A.m_number++;
B.m_number++;
printf("A.m_number : %d\n", A.m_number);
printf("B.m_number : %d\n", B.m_number);
printf("A size : %d\n", sizeof(A)); //类对象的大小不包含static成员变量
}
输出如下:
A.m_number : 0
B.m_number : 0
A.m_number : 2
B.m_number : 2
A size : 4