内存分区类型
代码区:
存放CPU执行的机器指令
代码区是共享的 共享的目的是对于频繁被执行的程序 只需要在内存中有一份代码即可
代码区是只可读的 使其只读的原因是防止程序意外的修改它的指令
全局区
全局变量和静态变量存放在此
全局区还包含了常量区 字符串常量和其他常量也存放在此 但是const修饰的
这个区域的数据在程序结束后由操作系统释放
#include<iostream>
using namespace std;
int g_a = 10; // 全局变量
const int g_b = 10; // const修饰的全局变量
int main()
{
int a = 10; // 普通的局部变量
static int s_a = 10; // 静态变量
const int a = 10; //const修饰的局部常量 不在全局区里面
}
引用
int a = 10;
cout << a << endl;
int& b = a;
b = 20;
cout << a << endl;
// 输出结果为 10 20
/* 1 引用必须要初始化 int &b; 错误
引用一旦初始化 就不可以更改 也就是 int &b = a; int &b = c 错误
*/
引用做函数的参数
void test01(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10;
int b = 20;
test01(a, b);
cout << "a的值为:" << a << endl;
cout << "b的值为:" << b << endl;
}
引用做函数的返回值
// 不要返回局部变量的引用
int& test01()
{
int a = 10;
return a;
}
int& test02()
{
static int a = 10; // 为静态变量 在全局区 在程序结束后由系统释放
return a;
}
int main()
{
int& ref = test01();
cout << ref << endl; // 第一次结果正确 是因为编译器做了保留
cout << ref << endl; // 第二次错误 是因为局部变量a的内存已经释放了
int& ref1 = test02();
cout << ref1 << endl;
cout << ref1 << endl;
test02() = 1000; // 如果函数的返回值是引用 则这个函数的返回值可以作为左值 来对其进行赋值操作
cout << ref1 << endl;
cout << ref1 << endl;
}
引用的本质