zoukankan      html  css  js  c++  java
  • 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  
  • 相关阅读:
    20155327 2017-2018-2 《Java程序设计》第9周学习总结
    20155327《Java程序设计》第八周学习总结
    实验二 Java面向对象程序设计
    20155327 李百乾 Exp4 恶意代码分析
    20155327结对编程练习
    20155327第七周学习总结
    2017-2018-1 20155310 20155337 实验五 通讯协议设计
    # 2017-2018-1 20155337《信息安全系统设计基础》第十三周学习总结
    # 20155337 2017-2018 1 课上测试、课下作业、实验
    # 课下测试ch02
  • 原文地址:https://www.cnblogs.com/chen-cs/p/13198800.html
Copyright © 2011-2022 走看看