static和extern

static作用

  static的作用主要体现在两个方面:

  • 作用域
  • 生存期

静态局部变量

   作用域:函数内部。

  生存期:整个程序运行期间。

1 void fun()
2 {
3       static int i = 1;    
4 }

静态全局变量

  作用域:本文件内部。

  生存期:整个程序运行期间。

static int n = 5;

int main ()
{
    return 0;
}

类静态数据成员

  类静态数据成员一个类只有一份实例,可以通过对象和类来使用。

class Test{
public:
    //静态数据成员
    static int a;
};
//初始化
int Test::a = 1;

int main()
{
    Test t;
    // 通诺对象使用
    t.a = 2;
    // 通过类使用
    Test::a += 1;

}

静态函数

  作用域:本文件内部。

  生存期:整个程序运行期间。

static void f() 
{

}

int main ()
{
    
}

类静态成员函数

  静态成员函数也是属于类的,它并不属于任何对象,可以通过类使用,也可以通过对象使用,它是不能访问非静态数据成员的,在c++中静态成员函数主要用来访问静态数据成员。

  • 静态成员函数不能调用非静态成员函数,但是反过来是可以的
  • 静态成员函数没有this指针,也就是说静态成员函数不能使用修饰符(也就是函数后面的const关键字)
  • 静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存。

C程序内存布局

  参考:https://www.cnblogs.com/418ks/p/10802184.html

extern的作用

  利用关键字extern,可以在一个文件中引用另一个文件中定义的变量或者函数。

在同一个文件

  使用了extern修饰函数和变量,就不需要在使用之前对函数和变量有声明。

 1 #include<stdio.h>
 2  
 3 int func();
 4  
 5 int main()
 6 {
 7     func(); //前面有声明可以
 8     printf("%d",num); //后面的全局变量有extern可以
 9     return 0;
10 }
11  
12 extern int num = 3;
13  
14 int func()
15 {
16     printf("%d
",num);
17 }

在不同文件

  这可以在文件2中使用文件1中的变量和函数。

 1 //文件1
 2  
 3 extern int num = 3;
 4  
 5 extern int func()
 6 {
 7     
 8 }
 9  
10 //文件2
11 #include <stdio.h>
12 int main()
13 {
14     func(); 
15     printf("%d",num); 
16     return 0;
17 }
18  
原文地址:https://www.cnblogs.com/chen-cs/p/13198800.html