一、内存
???1.1 内存四区
C++程序在执行时,将内存大致分为4个区域:代码区,全局区,栈区,堆区
?????🔵特点:①共享 :对于频繁被执行的程序,只需要在内存中有一份代码即可。 ? ? ? ? ? ? ? ? ????②只读:目的是防止程序意外地修改了它的指令。
- 全局区:存放全局变量、静态变量和常量(除了const修饰的局部变量)。程序结束时由操作系统释放。
int g_a = 10;
const int c_g_a = 10;
int main()
{
int l_a = 10;
static int s_a = 10;
const char* a = "hello";
const int c_l_a = 10;
cout << "局部变量l_a的十进制地址为:" << (int)&l_a << endl;
cout << "全局变量g_a的十进制地址为:" << (int)&g_a << endl;
cout << "静态变量s_a的十进制地址为:" << (int)&s_a << endl;
cout << "字符串常量a的十进制地址为:" << (int)a << endl;
cout << "const修饰的全局变量c_g_a的十进制地址为:" << (int)&c_g_a << endl;
cout << "const修饰的局部变量c_l_a的十进制地址为:" << (int)&c_l_a << endl;
return 0;
}
- 栈区:存放函数的参数值、局部变量。由编译器自动分配和释放。
?????🔴注意:不要返回局部变量的地址。
int* funcation()
{
int a = 10;
return &a;
}
int main()
{
int* p = funcation();
cout <<"局部变量a的值为:"<< *p << endl;
cout << "局部变量a的值为:" << *p << endl;
return 0;
}
- 堆区:由程序员分配(
new )和释放(delete ),若程序员不释放,程序结束时由操作系统回收。
int* funcation()
{
int* p = new int(10);
return p;
}
int main()
{
int* p = funcation();
cout << *p << endl;
cout << *p << endl;
return 0;
}
Tip:
- 程序运行前分为:代码区,全局区
- 程序运行后分为:栈区,堆区
[注]: 关于内存更详细的知识👉深度剖析数据在内存中的存储👉几分钟让你了解什么是函数栈帧的创建和销毁
???1.2 new操作符
int* p = new int(10);
delete p;
int* parr = new int[10];
delete[] arr;
测试delete
int* funcation()
{
int* p = new int(10);
return p;
}
int main()
{
int* p = funcation();
cout << *p << endl;
cout << *p << endl;
delete p;
cout << *p << endl;
return 0;
}
二、引用
???2.1 引用基本使用和注意事项
??? ???作用:给变量起个别名。 ??? ???语法:数据类型 & 别名 =原名
int a = 10;
int& b = a;
??? ???注意: ????????????①引用必须初始化。 ????????????②引用一旦初始化就不可以更改了。
int a = 10;
int& b;
int a = 10;
int c = 20;
int& b = a;
int& b = c;
???2.2 引用做函数参数
???
??????
|