static关键字

《一》在c语言中static的作用:

  1. static修饰的变量和函数都只在本文件中访问,其他文件不可访问,用extern关键字也不可以
  2. static修饰局部变量:
        (2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
        (3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
        (4)它延长了局部变量的生命周期,它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;

static的应用场景:

(1)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用static修饰 

3考虑到数据的安全性:两个不同的文件中有相同的变量名或函数名时,可以用static修饰

《二》在c++中static的作用:

一:修饰成员变量

  1. 静态数据成员可以实现多个对象之间的数据共享,它是类的所有对象的共享成员,它在内存中只占一份空间,如果改变它的值,则各对象中这个数据成员的值都被改变。 
  2. 静态数据成员不依赖对象调用(所谓的不依赖指的就是我想用对象调用就用对象调用,不想用就不用)所以在public下它有两种访问方式:《1:<类对象名>.<静态数据成员名> 2:<类类型名>::<静态数据成员名>》
  3. 静态数据成员必须在类外初始化,因为静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义,它在类外的初始话方式:<数据类型><类名>::<静态数据成员名>=<值>
  4. 因为静态数据成员是在全局数据在程序刚开始时被区分配内存,属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它;
  5. 静态数据成员和普通数据成员一样遵从public,protected,private访问规则;

二:修饰成员方法

  1. 静态的成员方法也不依赖对象调用,所以它也有两种调用方式:(1:以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函:2:用作用域直接访问<类名>::<静态成员函数名>(<参数表>))
  2. 静态的成员方法中没有this指针,(this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的,但是,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针)
  3. 由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
  4. 出现在类体外的函数定义不能指定关键字static

由于静态成员方法没有this指针:

  • 静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
  • 普通成员函数可以任意地访问静态成员函数和静态数据成员;
  • 静态成员函数不能访问普通成员函数和普通数据成员;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值