美文网首页
关键字 static

关键字 static

作者: 曹小恒 | 来源:发表于2018-04-02 16:57 被阅读0次

1.修饰局部变量
static 修饰局部变量时, 这个变量成为静态变量, 存储在静态区, 生命周期和程序相同, 这个变量在 main 函数之前初始化,在程序退出的时候销毁.
即使在退出函数之后,这个变量也不会被销毁.

  1. 修饰全局变量
    全局变量本来就在静态区,但是 static 可以限制他的连接属性,被 static 修饰的全局变量只能被被包含该定义的文件访问. 因此可以将变量的声明和定义放在头文件中,从而被多个(非常不推荐,使用 extern更好)

  2. 修饰函数
    static 修饰的函数只能在该函数定义的文件中被调用.其定义和声明需要放在同一个文件中.

  3. 类成员修饰

  • 静态成员函数属于同一个类,而不是某一个成员,不能是虚函数,能节省子类的内存空间
  • 静态数据成员必须初始化,要在类外初始化,静态数据成员属于整个类,而不是任何一个类的成员. 但是 const static 是可以在类内初始化的,因为这个值是固定的,编译器不会尝试多次初始化(**类外定义,类内声明)

初始化时不要加上static

作用

  1. 隐藏(作用域)
    修饰全局变量和函数的时候,只有在包含他们定义的地方,才能被调用,对于其他. c 文件,他们是不可见的.
  2. 确定生存周期(static 有记忆功能,仅仅初始化一次)
    全局变量和静态变量都存储在静态区,静态变量可以控制可见范围.局部变量的生存周期和整个程序相同(初始化在 main 之前,退出所在函数后不销毁,但是不能访问因为作用域的原因.)
#include <stdio.h>
 
int fun(){
    static int count = 10; //在第一次进入这个函数的时候,变量a被初始化为10!并接着自减1,以后每次进入该函数,a
    return count--; //就不会被再次初始化了,仅进行自减1的操作;在static发明前,要达到同样的功能,则只能使用全局变量:    
 
}
 
int count = 1;
 
int main(void)
{
     printf("global\t\tlocal static\n");
     for(; count <= 10; ++count)
               printf("%d\t\t%d\n", count, fun());
     return 0;
}

输出为


图片.png

结论
局部变量->静态变量: 生存期和初始化方式
全局变量->静态变量: 作用域(静态变量只能在定义的文件中可以被调用)

  1. 默认初始化为0

  2. 修饰成员函数和成员变量
    静态成员属于整个类而不是任何一个对象,只存储一份供给所有对象共享

  • 类成员可以调用静态成员函数和静态成员对象
  • 静态成员函数不能调用非静态成员变量,因为静态成员函数属于整个类,在实例化之前就已经分配空间,但是成员变量必须实例化之后才能存在
  • 非静态成员函数可以调用静态成员函数,反之不行

相关文章

  • OC中static、const、extern关键字理解

    static关键字 static关键字用于修饰变量。 static修饰局部变量当使用static修饰局部变量时, ...

  • static关键字

    Static关键字概述 static(静态)关键字可以用于修饰变量、方法和代码块。我认为static关键字的主要用...

  • 【Java】关键字

    一、 static关键字 static关键字的总结: static关键字 可以再没有创建对象的时候进行调用类的元素...

  • Java学习Day03

    今日学习内容总结 Static关键字 Arrays类 Math类 继承 Static关键字 一旦用了static,...

  • java基础-day11-static关键字

    static关键字和接口 1. static关键字【重点】 1.1 static修饰静态成员变量 1.1.1 为什...

  • C语言中的static关键字

    @TOC C语言中的static关键字 static 关键字,意为静态。 static 变量 特性:全局变量在函数...

  • Static关键字

    C语言中的static关键字和Java的static关键字意义不一样。 1 用static修饰函数 static用...

  • C基础知识

    基础问题 1.static关键字和const关键字。 static: 作用于变量时:用static声明局部变量--...

  • 13.面向对象进阶—静态关键字static

    面向对象进阶 静态关键字static static关键字的作用,修饰成员变量的用法 static是静态的意思,可以...

  • Java学习13:static关键字,this关键字

    static关键字 static翻译为“静态的”。所有static关键字修饰的都是类相关的,类级别的。所有stat...

网友评论

      本文标题:关键字 static

      本文链接:https://www.haomeiwen.com/subject/crsxhftx.html