可读可写 | 堆区 | 使用malloc、calloc、realloc、free动态申请 |
& 可读可写 | 栈区 | 局部变量、函数的形参、返回值>4B |
& 可读可写 | 全局区 | 普通全局变量、静态全局变量、静态局部变量 |
只读 | 文字常量 | 数值常量、字符常量、字符串常量、符号常量 |
只读 | 代码区 | 代码的二进制指令 |
普通局部变量
定义形式:在{}里面定义的 普通变量 叫普通局部变量
int main(int argc, char *argv[])
{//复合语句
int num = 0;//num 局部变量
{
int data = 0;//data 局部变量
}
}
作用范围:所在的{}复合语句之间有效
生命周期:所在的{}复合语句之间有效
存储区域:栈区
注意事项:
1、普通局部变量 不初始化 内容 不确定
2、普通局部变量 同名 就近原则 (尽量别同名)
int main(int argc, char *argv)
{ //复合语句
int num = 10; //num 局部变量
{
int num = 20; //data 局部变量
cout << num << endl; //20 就近原则
}
cout << num << endl; //10
}
普通全局变量
定义形式:在函数外定义的普通 变量
int data = 10;//普通全局变量
int main(int argc, char *argv[])
{
}
作用范围:当前源文件以及其他源文件 都有效。
生命周期:整个进程。
存储区域:全局区。
注意事项:
1、全局变量不初始化 内容为0
2 、全局变量 和 局部变量 同名 优先选择局部变量
int data = 10;//普通全局变量
int main(int argc, char *argv[])
{
int data = 20;//普通局部变量
cout<<data<<endl;//20
cout<<::data<<endl;//10
}
3、其他源文件 使用全局变量 必须对全局变量 进行extern声明。(变量的使用所在的源文件)extern声明外部可用。该变量或函数 来自于其他源文件。
01_fun.cpp
//extern 声明data为int类型 来之其他源文件
extern int data;
void add_data(void)
{
data = data + 100;
return ;
}
01_code.cpp
extern void add_data(void);
int data = 10;//普通全局变量
int main()
{
add_data();
cout<<"data="<<data<<endl;
}
静态局部变量
定义形式:在{}加static定义的局部变量 就叫静态局部变量
int main(int argc, char *argv[])
{
int data1 = 10;//普通局部变量
static int data2 = 20;//静态局部变量
}
作用范围:所在的{}复合语句之间有效
生命周期:整个进程有效
存储区域:全局区
注意事项:
1、静态局部变量不初始化 内容为0
2、静态局部变量 整个进程 都存在(第一次定义有效)
void fun()
{
static int num = 10;
num++;
cout<<"num="<<num<<endl;
}
int main()
{
fun();//num = 11
fun();//num = 12
fun();//num = 13
fun();//num = 14
}
静态全局变量
定义形式:在函数外 加static修饰定义的变量 就是静态全局变量
int data3 = 10;//普通全局变量
static int data4 = 20;//静态全局变量
void fun()
{
}
作用范围:只能在当前源文件使用 不能在其他源文件使用。
生命周期:整个进程
存储区域:全局区
注意事项:
1、静态全局变量不初始化 内容为0
2、静态全局变量 只能在当前源文件使用