static关键字的作用

7 篇文章 0 订阅

在C语言中;
1.static修饰局部变量,被static修饰的局部变量只执行一次,生命周期被改变了,随整个程序,储存位置在静态常量区,初始化的时候自动被初始化为0,但是作用域被没有发生改变。

#include <stdio.h> 
void test()
{
    static int num = 0; 
    num++;    
    printf("%d\n", num);
}

int main() 
{
    int i = 0; 
    for (i = 0; i<10; i++)
    { 
        test();
    }

    system("pause");
    return 0;
}

得到的结果是1,2,3,4,5,6,7,8,9,10,而不是1,1,1,1,1,1,1,1,1,1;

2.static修饰全局变量,改变了这个全局变量的外部链接属性,该全局变量只能在本文件中被访问,在其他文件中不可被访问,extern外部声明也不可以。

在file1中定义一个全局变量

int a = 10;

在file 2中进行申明

extern a ;

int main()
{
    a = 20;
    printf("%d\n", a);
    system("pause");
    return 0;
}

运行结果:
这里写图片描述

但是如果file1中的a用static修饰

static int a = 10;

在file2中不做任何改变

extern a ;

int main()
{
    a = 20;
    printf("%d\n", a);
    system("pause");
    return 0;
}

但是运行就会报错:
这里写图片描述
3.static修饰函数,改变该函数的外部链接属性,该函数只可以在本文件中被访问,不能被其他文件调用。和static修饰全局变量一样;

使用场景:
1.局部变量不想被释放的时候,比如栈环境下创建的变量,或者一个数组在站上被创建,但是函数被销毁的时候还不想被释放,就可以使用static修饰。
2.考虑到数据安全性问题,如指向在本文件中使用的全部变量;

在c++中static关键字的作用:
1.c++完全兼容C语言,所以在C语言static的特性在c++中也同样适用;
2.static在修饰类的成员变量的时候,该成员变量是公有的,在内存中只存在一份数据,可以实现多个对象共享一份数据,如果改变他的值,所有对象拥有该变量的值都会被改变;

class Date
{ 
 public :
     // 静态成员函数
     static void PrintCount()
     {          
          cout<<"Date count:" <<sCount<< endl;
     }
 private :  
    int _year ; // 年 
    int _month ;    // ⽉     
private :     
static int sCount; // 静态成员变量,统计创建时间个数 
}; 
// 定义并初始化静态成员变量 
int Date::sCount = 0; 
void Test ()
 { 
     Date d1 ,d2;   

     // 访问静态成员     
    Date::PrintCount ();
 }

3.静态成员变量,在程序运行开始的时候分配空间,到程序运行结束才被释放,只要类中指定了静态成员变量,即使不实例化对象,也会为其开辟空间;
4.静态成员变量必须在类里申明,在类外进行初始化;如果对静态成员变量赋初值,则编译器默认为0;
5.静态成员变量可以通过对象名引用,也可以通过类名引用;

int & a=Date:: sCount;
或者
int& b= Date;

6.static修饰静态成员函数,和静态成员变量一样,他们属于类的静态成员,而不是对象的成员。
7.静态成员变量没有this指针;
8.静态成员函数只能访问之态成员函数,而不能访问非静态成员变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值