C++程序在执行时,将内存大方向划分为4个区域,
(1)代码区:存放函数体的二进制代码,由操作系统进行管理;特点:共享的、只读的。
(2)全局区:存放全局变量和静态变量以及常量;该区域的数据在程序结束后由操作系统释放。
(3)栈区:由编译器自动分配和释放,存放函数的函数值、局部变量等;
(4)堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
内存四区意义:不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程。
利用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;
- }
(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;
- }