C++变量的存储方式(持续性、作用域、链接性)

这是关于内存的知识,我们设置的变量使如何存放的,C++的存储方式需要用到如下三个名词来解释:

持续性:分为1.自动存储持续性2.静态存储持续性。什么意思呢,就是指我们的这个变量的有效期为多少。在默认情况下,在函数中声明的函数参数和变量的存储持续性为自动,作用域为局部,超过了这个代码块就会消亡:

int main()
{
    int a = 1;
    {
        int b = 2;//我们关注这里的b,在此阶段b存在
    }//退出代码块b已经消亡了,这就是自动存储类型的含义
    return 0;
}

作用域:作用域描述了名称在文件的多大范围内可见,举个例子感受一下作用域。

int main()
{
    int a = 1;//这里先来一个a
    {
        int a = 2;//再来一个不一样的a
        cout<<a<<endl;//①处的a输出的是多少?
    }
    cout<<a<<endl;//②处的a输出时多少?
    return 0;
}

应该感到疑惑,①处a输出的是多少,答案是2。其实是在里面的代码块星定义的a隐藏了以前的定义,新定义可见,旧定义不可见,因此中间的代码块非上面的a的作用域。

②处输出时多少,答案是1。因为代码块中a是自动存储的,在出这个代码块的时候已经消亡了,旧的a定义又重新可见了,因此又可以说后面是上一个a的作用域。

链接性:链接性一共分三种。1、外部链接性(可在其他文件中访问)2、内部链接性(只能在当前文件中访问)3、无链接性(只能在当前函数或代码块中访问)

举个例子说明链接性

···
int golbal = 1000;//外部链接
static int one_file = 50;//内部链接
int main()
{
    ···
}
void func(int n)
{
    static int count =0;//无链接
    int llama = 0;
}

在上面的代码中,列出了三种链接,均是以静态存储持续性变量(相对于动态的,可以思考一下)的方式提供的。

值得注意的细节是,要创建链接性为外部的静态持续变量,必须在代码块的外面声明它;要创建链接性为内部的静态持续变量,必须在代码块外声明它,并且使用static限定符;要创建没有链接性的静态持续变量,必须在代码块内声明它,且使用static限定符。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值