1.常量
c++中常量修饰符为const,告诉编译器这个名字是常量。如果定义了某对象为常量,然后试图想修改它,编译器会报错的。
const int x=10;
注意:
1)在C中,编译器对待const如同变量一样,只不过带有一个特殊的标记,意思是:“不要改变我”。
2)在c++中,一个const常量必须有初始值。
2.全局变量
全局变量顾名思义就是在所有函数体(包括main函数)的外部定义的,程序的所有部分(甚至外部文件中的代码)都可以使用它的,这也就是说全局变量不受作用域的影响,总是可用的。
#include<iostream>
using namespace std;
int globe;//全局变量
static int satus;
void digui(int a)
{
if(a<10)
{
cout << a << ' ';
digui(a + 1);
}
}
void main04()
{
digui(2);
}
注意:
1)想在一个文件中使用另外一个文件定义的全局变量,可以用extern关键字,那么就可以在该文件使用了。
extern int globe
2)全局变量的生命周期一直到程序结束。
3.局部变量
局部变量出现在一个作用域内,它们是局限与一个函数的。因此常被称为自动变量,因为它们在进入作用域是自动生成,离开作用域时自动消失,常用关键字auto,但是局部变量默认为auto,所以没有必要声明auto。
4.静态变量
静态变量常用static关键字修饰,通常情况下,函数中定义的局部变量在函数作用域结束时消失。当再次调用这个函数时,再被创建,再被初始化,但是想局部变量的值在程序的整个生命周期都仍然存在,我们就把它定义为static静态变量,具有记忆的功能。
但是为啥不使用全局变量呢?static变量的优点在于在函数范围之外它是不可用的,所以不容易被修改。
static还可以作用于函数和外部变量,它的意思是“在文件的外部不可以使用这个名字”。函数名或者变量名是局限于文件的
5.外部变量
外部变量常用关键字为:extern,他告诉编译器存在一个变量和函数,即使在当前编译的文件中没看见他,但是可能存在当前文件的后面或者另外的一个文件。
6.内存分区
程序运行前 :
代码区(存放CPU执行的机器指令):
- 共享的,共享的目的是对于频繁被执行的程序,只需在内存中存放一份代码即可
- 只读的,使其只读的原因是防止程序以外地被修改了它的指令。
全局区(存放全局变量、静态变量、字符串常量、全局常量):
- 该区域的数据在程序结束后由操作系统释放。
程序运行后:
栈区(局部变量、形参):
- 由编译器自动分配和释放,存放函数的参数、局部变量等
- 注意:不要反悔局部变量的地址
堆区:
- 由程序员分配释放,如果程序员不释放,程序结束时由系统回收
- c++中利用new开辟内存,返回堆上的地址,用指针接收