static关键字

局部变量

  1. 局部变量

    局部变量是最常见的量,编译器不会对其进行初始化,除非对其显式赋值,不然初始值是随机的。

    普通局部变量存储在栈空间,使用完毕后会立即被释放。

  2. 静态局部变量

    静态局部变量由static修饰,申明时就必须初始化,就算未被初始化编译器也会将它初始化为0。静态局部变量存储于进程全局数据区,即使函数返回,他的值也不会变。

    void f(){
    int n = 0;
    cout<<n<<endl;
    n++;
    cout<<n<<endl;
    cout<<"------------"<<endl;
    }
    void S(){
    static int n = 0;
    cout<<n<<endl;
    n++;
    cout<<n<<endl;
    cout<<"------------"<<endl;
    }

    函数S与f唯一的不同就是n为局部静态变量,但是S结束后n的值被保留,f结束后n被释放。

    全局变量

    全局变量定义在函数体外部,编译器会自动对其进行初始化并且将其存储在栈区。

    普通全局变量对整个工程可见,即其他文件使用extern外部申明后可直接使用。也就是说其它文件中不能再有名字相同的变量了。

    静态全局变量只针对本文件可见,其他文件无法访问。

    使用静态全局变量可使该变量只在本文件中可见,能有效降低程序模块的耦合,且不会误会使用

    静态函数

    静态函数与静态全局变量相似,在其他文件中不可见。普通函数在另一个文件中甚至不需要extern就能被使用。

    面向对象

    静态数据成员

    在类内数据成员申明前加上static,就成了静态数据成员。有如下特点:

    • 静态数据成员存储在全数据区,在定义时分配存储空间,因此不能在类中定义。
    • 静态数据成员是类的成员,无论定义了多少类的对象,只有一份拷贝,且对所有类的对象可见。对于非静态数据成员,有多少类的对象就有多少分拷贝。
    • 静态数据成员不属于任何类,在没有对象(类的实例)时,就能对其进行操作。
    • 静态数据成员初始化格式: 数据类型 类名::静态数据成员名 = 值;
    • 类的静态数据成员的两种访问方式: 类名.静态数据成员名 或者 类名::静态数据成员名

    静态数据成员相对全局变量的优势

    1. 不会进入命名空间,不与其他文件的变量名冲突
    2. 静态数据成员可以是private的

    静态成员函数

    与静态数据成员相似,静态成员函数不依附于类的对象,特性如下:

    1. 静态成员函数没有this指针,不能访问类的非静态数据成员,也不能访问类的非静态成员函数,它只能调用其他的静态成员函数。
    2. 出现在类体外的函数定义不能指定关键字static。
    3. 非静态成员函数可以自由访问静态数据成员和静态成员函数。

参考链接:

  1. c语言中static关键字用法详解

最新文章

  1. iOS 跳转到App Store下载或评论
  2. Leetcode Bulb Switcher
  3. Java学习-045-目录中文件拷贝
  4. 通知 Notification
  5. 团队项目作业:利用NABCD模型进行竞争性需求分析
  6. 【原创】本地通过IIS设置开发的localhost网站的域名改为个性域名方法
  7. IOS第七天(1:UiTableView 的基本用法)
  8. 【Java】Float计算不准确
  9. S5PV210之添加缺少的-内核提供的&#39;.h&#39;文件 linux3.0.8驱动
  10. [Flex] ButtonBar系列——简单布局
  11. python3.0与2.x之间的区别
  12. HDU5087——Revenge of LIS II(BestCoder Round #16)
  13. oracle_partition sample_simple
  14. Android中的动画学习总结
  15. JavaScript和ajax 跨域的案例
  16. php php打乱数组二维数组、多维数组
  17. AOJ 2200 Mr. Rito Post Office(Floyd+单调DP)
  18. ajax 页面请求后,jsp页面定位
  19. 前端js优化方案(连续更新)
  20. Javascript的防抖和节流、VUE的防抖和节流

热门文章

  1. LeetCode 101.对称二叉树 - JavaScript
  2. redhat 7.6 rpm ,yum ,编译安装
  3. 「AHOI2008」紧急集合/聚会
  4. SSM(Spring-SpringMvc-Mybatis)练习
  5. redis api-zset
  6. [FBCTF2019]Products Manager
  7. 「HNOI2008」玩具装箱
  8. 103、Java中String类之compareTo()方法
  9. 获取JSHANDLE句柄
  10. JavaScript 标识符,关键字和保留字