C++_06_static关键字用法

C语言static关键字:

  为什么要使用static——静态:

      1、对于静态全局变量而言,存储在数据段,目的是限制其他源文件(.c文件)的访问权限

      2、对于静态局部变量而言,存储在数据段,经过证实存储在数据段的静态存储区,生存周期维持在整个源文件内(函数结束不会立即销毁,会保存在数据段的静态存储区,可以改变值)

        (记住,静态局部变量依旧是局部变量,只不过拥有了部分全局变量不死的特性!)

    

#include<stdio.h>

int fun(int x)
{
    static int a = 3;      //static 修饰的a —— 静态局部变量 
        // 存储在数据段内,其值可以修改,最大的变化就是改变了生存周期
    x += a++;      //先赋值3,完成x = x +3 ,后面才自加
    printf("a = %d\n",a);
    printf("x = %d\n",x);
    return x;         //函数结束临时变量x被释放 x 依旧为 x = 2
}
void main()
{
    int x = 2, sum;
    sum = fun(x);
    //sum = sum + fun(x);
    printf("sum = %d\n", sum);
}

static关键字的作用

  (1)定义静态变量
      1、定义静态变量(全局静态和局部静态):在变量类型前加上static关键字,变量即被定义为静态变量,静态变量只能在本源文件中使用。初始化的静态变量会在data段分配内存,未初始化的静态变量会在bss段分配内存。直到程序结束,静态变量始终会维持前值。只不过全局静态变量和局部静态变量的作用域不一样。
      2、在c++中,static关键字可以用于定义类中的静态成员变量:使用静态数据成员,它既可以被当成全局变量那样去存储,但又被隐藏在类的内部。类中的static静态数据成员拥有一块单独的存储区,而不管创建了多少个该类的对象。所有这些对象的静态数据成员都共享这一块静态存储空间。

   (2)定义静态函数
      1、定义静态函数:在函数返回类型前加上static关键字,函数即被定义为静态函数,静态函数只能在本源文件中使用
      2、在c++中,static关键字可以用于定义类中的静态成员函数:与静态成员变量类似,类里面同样可以定义静态成员函数。只需要在函数前加上关键字static即可。如静态成员函数也是类的一部分,而不是对象的一部分。所有这些对象的静态数据成员都共享这一块静态存储空间。

    当调用一个对象的非静态成员函数时,系统会把该对象的起始地址赋给成员函数的this指针。而静态成员函数不属于任何一个对象,因此C++规定静态成员函数没有this指针(划重点,面试题常考)。既然它没有指向某一对象,也就无法对一个对象中的非静态成员进行访问。

     补充:类中static修饰的静态成员函数没有this指针,不属于任何一个对象,无法后接对象地址

         静态成员函数只能访问       ------>       静态成员函数(不属于对象)        静态成员变量         类以外的函数和变量
                    不能访问       ------>      非静态的成员函数(属于对象)
         非静态成员函数     静态非静态(函数、变量)都可以访问


          理解1:静态成员函数所需内存在程序执行前就分配好了,非静态成员必须要等到这个类在堆或者栈上分了内存才能用,所以如果静态成员函数访问非静态,可能非静态成员还没有内存。
          理解2:静态成员函数(变量)属于类的公有资源,非静态成员函数(变量)一般属于对象的私有资源,私有可以访问公有,但公有一般不可访问私有(主要指私有函数(非静态成员函数),因为没有this指针)(某些条件下可以做到间接访问)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值