C++ 存储类

C++ 中的不同存储类。即:local、global、static local、register和thread local。

C++中的每个变量都有两个特征:类型和存储类。

类型指定可以存储在变量中的数据类型。例如:intfloatchar等

存储类控制变量的两个不同属性:生命周期(确定变量可以存在多长时间)和范围(确定程序的哪一部分可以访问它)。

根据变量的存储类别,它可以分为 4 大类型:

局部变量

在函数内部定义的变量(在大括号之间的函数体内定义)称为局部变量或自动变量。

它的范围仅限于定义它的函数。简单来说,局部变量存在并且只能在函数内部访问。

当函数退出时,局部变量的生命结束。

#include <iostream>
using namespace std;

void test();

int main() 
{
    //main() 的局部变量
    int var = 5;

    test();
    
    // 非法:var1 未在 main() 中声明
    var1 = 9;
}

void test()
{
    // test() 的局部变量
    int var1;
    var1 = 10;

    //非法:var 未在 test() 中声明
    cout << var;
}

var1在main中未被声明,可以改为int var1=9,即声明的var1变量;

而var在test()函数里未被声明,可以改为int var且var =10,

此时运行代码,结果为10,局部变量只在存在函数内部,在main中调用test()函数时,只有var=10传入。

修改示例:

#include <iostream>
using namespace std;

void test();

int main()
{
    // main() 的局部变量
    int var = 5;

    test();

    // 非法:var1 未在 main() 中声明
    int var1 = 9;
}

void test()
{
    // test() 的局部变量
    int var;
    var = 10;

    // 非法:var 未在 test() 中声明
    cout << var;
}

结果:

全局变量

如果一个变量定义在所有函数之外,那么它就被称为全局变量。

全局变量的范围是整个程序。这意味着,它可以在声明后在程序的任何部分使用和更改。

同样,它的生命仅在程序结束时结束。

示例:

#include <iostream>
using namespace std;

// 全局变量声明
int c = 10;

void test();

int main()
{
    c++;

    // 输出 11
    cout << c << endl;
    test();

    return 0;
}

void test()
{
    c++;

    // 输出 12
    cout << c;
}

结果:

 静态局部变量

 关键字static用于指定静态变量。例如:

... .. ... 
int main() 
{ 
   static float a; 
   ... .. ... 
}

静态局部变量仅存在于声明它的函数内部(类似于局部变量),但其生命周期从调用函数时开始,仅在程序结束时结束。

局部变量和静态变量的主要区别在于,静态变量的值在程序结束时一直存在。

示例(静态局部变量):

#include <iostream>
using namespace std;

void test()
{
    // var 是一个静态变量
    static int var = 0;
    var++;

    cout << var << endl;
}

int main()
{

    test();
    test();

    return 0;
}

结果:

 在上面的程序中,test() 函数被调用了 2 次。
在第一次调用时,变量 var 被声明为静态变量并初始化为 0。然后将 1 添加到屏幕上显示的 var。
当函数 test() 返回时,变量 var 仍然存在,因为它是一个静态变量。
在第二次函数调用期间,没有创建新变量 var。同样的 var 加 1,然后显示到屏幕上。

Note:var如果未指定为静态变量,即局部变量,则上述程序的输出结果为:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三千思丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值