从前一直用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记录会更乱,所以以后会把所有的笔记都放在这里,包括从前做过的笔记也会发到这里做个记录