C++中变量的作用域和生命周期

来源:互联网 发布:知乎 竖肩章 编辑:程序博客网 时间:2024/04/24 18:15
#include "iostream.h"void main(){    int m=1,n=2,k=3;    cout<<"m="<<m<<"n="<<n<<"k="<<k<<endl;    cout<<"m="<<1<<"n="<<2<<"k="<<3<<endl;    {        //重新声明了n值,因此此层中的n相当于一个新的变量,对外层无影响        int n=4;        m++;        k+=4;        //下面代码块重新声明,其实可以看做独立出来的一部分,不影响其他模块        {        //没有声明n值,继续使用上一层的n值         int m=3,k=3;         cout<<"m="<<m<<"n="<<n<<"k="<<k<<endl;         cout<<"m="<<3<<"n="<<4<<"k="<<3<<endl;        }        k+=5;        m-=4;         cout<<"m="<<m<<"n="<<n<<"k="<<k<<endl;         cout<<"m="<<-2<<"n="<<4<<"k="<<12<<endl;    }    //此处的m,k值继续其内一层的模块值,n为最外层的值,因为上一层中声明了n    m+=2;    n++;    k--;    cout<<"m="<<m<<"n="<<n<<"k="<<k<<endl;    cout<<"m="<<3<<"n="<<3<<"k="<<2<<endl;}

运行结果:

这里写图片描述

通过这道题可以判断下自己的理解,要区分在作用域内是否重定义,如果重定义则相当于一个新的变量来对待,使用作用域内重定义的变量值,并且这个值在脱离作用域后销毁,如果没有重定义,则一直使用其外围作用域范围内的变量及对应的值。也就是说,在括号内部声明的变量相当于不同的变量,占据不同的内存。在内部没有声明变量时,则还是原来的变量。

1 0