1. 内存分区模型
C++程序在执行时,将内存大方向划分为4个区域,
(1)代码区:存放函数体的二进制代码,由操作系统进行管理;特点:共享的、只读的。
(2)全局区:存放全局变量和静态变量以及常量;该区域的数据在程序结束后由操作系统释放。
(3)栈区:由编译器自动分配和释放,存放函数的函数值、局部变量等;
(4)堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
内存四区意义:不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程。
2. new操作符
利用new关键字可以将数据开辟到堆区。new返回的是指向该数据类型的指针。
(1)在堆区利用new开辟整型数据
int * func(){
//在堆区创建整型数据
int * p = new int(10);
return p;
}
void test(){
int * p = func();
cout << *p << endl;
delete p;
}
int main(){
test();
return 0;
}
(2)在堆区利用new开辟数组
void test(){
int * arr = new int[10];
for(int i=0;i<10;i++){
cout << arr[i] << endl;
}
delete[] arr;
}
int main(){
test();
return 0;
}
3. 引用
(1)作用:给变量起别名。
(2)语法:数据类型 &别名 = 原名;
int a = 10;
int &b = a;
cout << a << endl; //10
cout << b << endl; //10
b = 100;
cout << a << endl; //100
cout << b << endl; //100
a = 50;
cout << a << endl; //50
cout << b << endl; //50
(3)引用作为函数参数
引用传递,形参会修饰实参。
// 值传递
void swap01(int n, int m){
int temp = n;
n = m;
m = temp;
cout << n << endl; // 1
cout << m << endl; // 0
}
// 地址传递
void swap02(int *p1, int *p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
cout << *p1 << endl; // 1
cout << *p2 << endl; // 0
}
// 引用传递
void swap03(int &n, int &m) {
int temp = n;
n = m;
m = temp;
cout << n << endl; // 1
cout << m << endl; // 0
}
int main() {
int n = 0;
int m = 1;
swap01(n, m);
cout << n << endl; // 0
cout << m << endl; // 1
swap02(&n, &m);
cout << n << endl; // 1
cout << m << endl; // 0
swap03(n, m);
cout << n << endl; // 1
cout << m << endl; // 0
return 0;
}