关于c++中的普通变量,局部变量和静态变量的问题

从前一直用python,为了学习ros最近在学c++,因此把学的东西记录一下,当一个笔记

看的视频是b站的千峰教育的视频,如果有侵权会删除,主要是给自己留一个笔记。

普通局部变量

比如 int a= 0;

作用范围:所在的{}复合语句之间有效 定义是在{}里面

生命周期:所在的{}复合语句之间有效

存储区域:栈区


void func()
{//复合语句1
   int num = 0;// 在栈区
    {//复合语句2

       int data = 0;// 这个复合语句2里面定义的data的声明周期只限于这个复合语句2之内
   }
//    cout<<data<<endl; 这个是不行的
}

静态局部变量 

比如有 static int a=0;

作用范围:所在的{}复合语句之间有效

生命周期:整个进程有效

存储区域:全局区 虽然是局部变量但是只定义一次,

目的是多次调用子函数时,里面的定义不被释放

比如

void test04()
{
    int data_1  = 10;
    static int data_2 = 20;
    data_1 = data_1+5;
    data_2 = data_2+10;
    cout << "data1: "<< data_1<<endl;// 如果连续调用2次test04,那么data2的值第一次打印是15,第二次还是15
    cout << "data2: "<< data_2 << endl;// 如果连续调用2次test04,那么data2的值第一次打印是30,第二次是40
}


int main()
{
    test04();
    test04();
    return 0;
}

普通全局变量

在{}外面定义

作用范围:当前源文件以及其他源文件 都有效。

生命周期:整个进程。

存储区域:全局区 A文件用B文件的a 则A文件中需要external int a;

注意这个a在B文件中必须是普通全局变量

静态全局变量

作用范围:只能在当前源文件使用 不能在其他源文件使用。

生命周期:整个进程

存储区域:全局区

注意在栈区的东西如果不初始化就是任意数,在全局区的不初始化就是0

静态xx在整个进程中只有第一次定义有效,其数值不会被释放

只有c++中有整个静态xxx,这样可以把保证不同文件用同一个i不会被覆盖

这个是python中的输出,python

件A中有变量i, A.py i = 10

件B中也有变量i, B.py i = 20 import A print(i)

果输出: 20

此可以看出,在B文件中,导入A文件中定义的变量i,但是B文件中定义的变量i会覆盖A文件中定义的变量i,因此打印出来的结果为20。

C++是一种静态类型语言,它会检测变量重复定义的问题,因此更加严谨;而Python是一种动态类型语言,它不会检测变量重复定义的问题,因此比C++更加灵活。

突然发现放在这里是个不错的选择,有能加文字又能加程序框,平常用word记录会更乱,所以以后会把所有的笔记都放在这里,包括从前做过的笔记也会发到这里做个记录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值