【C/C++知识点】变量的4种存储类型

✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:C/C++知识点
📣专栏定位:整理一下 C++ 相关的知识点,供大家学习参考~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
🎏唠叨唠叨:在这个专栏里我会整理一些琐碎的 C++ 知识点,方便大家作为字典查询~

变量的4种存储类型

存储类用于定义C++程序中变量和函数的生命周期和可见性。

寿命是指变量保持活动的时间段,可见性是指可访问变量的程序的模块。

有五种类型的存储类,可以在C++程序中使用:

  1. 自动(Automatic)
  2. 寄存器(Register)
  3. 静态(Static)
  4. 外部(External)
  5. 可变(Mutable)

数据类型

  • 数据类型: 如 int ,float 等。
  • 存储类型: 总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。
    • auto - 函数中所有的非静态局部变量。

      auto是所有局部变量的默认存储类。

      auto关键字自动应用于所有局部变量。

      {
          auto int v1;
          float v2 = 99.1;
      }
      

      上面的例子定义了两个具有相同存储类的变量,auto只能在函数中使用。

    • register - 一般经常被使用的的变量(如某一变量需要计算几千次)可以设置成寄存器变量,register 变量会被存储在寄存器中,计算速度远快于存在内存中的非 register 变量。

      寄存器变量在寄存器中分配存储器而不是RAM。 其大小与寄存器大小相同。 它比其他变量具有更快的访问速度。

      建议仅使用寄存器变量进行快速访问!

      ex:在计数器中。

      register int count=0;
      

      注意:不能得到寄存器变量的地址。

    • static - 在变量前加上 static 关键字的变量,它只会定义一次,以后反复定义这个变量都是使用同一个。

      静态变量只初始化一次,直到程序结束。

      它保留可在多个函数之间调用的值。

      静态变量由编译器提供的一个默认值:0。

      void func() { 
          static int v1=0; //static variable 
          int v2=0; //local variable
          v1++;
          v2++;
          cout<<"v1=" << v1<<" v2=" <<v2<<endl;
      }
      

      调用上面的func()会发现每次调用v1的值都会增加,而v2的值不会变。

    • extern - 把全局变量在其他源文件中声明成 extern 变量,可以扩展该全局变量的作用域至声明的那个文件,其本质作用就是对全局变量作用域的扩展。

      extern变量对所有程序都可见。

      如果两个或多个文件共享相同的变量或函数,则使用它。

      extern int v1 = 0;
      

externDemo.cpp

#include<stdlib.h>

int extern_value = 10;

main.cpp

#include<stdlib.h>
#include<iostream>

using namespace std;

extern int extern_value;    //从externDemo.cpp中取过来
static int p1 = 24;//全局静态变量

//寄存器变量
void register_demo() {
    register int j = 0; //不能在全局定义
    printf("register_demo:j=%d ", j);
    //register可以不用再用,是C遗留下来的
    //C++的register关键字已经优化,可以不用去申明
    //如果我们打印它的地址,它就变成了普通的auto变量
    printf("&j:0x%p\n", &j);
}

//静态局部变量量
void static_demo() {
    static int p2 = 23;
    int p3 = 23;
    p2++, p3++;
    //每次调用这个函数p2都会在上次的值的基础上加1,而p3只会等于24
    printf("static_demo:p2=%d p3=%d\n", p2, p3);
}

//外部变量
void extern_demo() {
    extern_value++;
    printf("extern_demo:extern_value=%d\n", extern_value);
}

int main()
{
    auto i = 0; //自动变量,自动定义为整数变量
    register_demo();
    static_demo();
    static_demo();
    static_demo();
    extern_demo();
    return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EQuYfU01-1658804180869)(C++常见知识点及问题.assets/image-20220726105128144.png)]

变量的作用域和生存周期

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值