• C嘎嘎 - 内存分区


    1. 内存分区模型

          C++程序在执行时,将内存大方向划分为4个区域,

    (1)代码区:存放函数体的二进制代码,由操作系统进行管理;特点:共享的、只读的。

    (2)全局区:存放全局变量和静态变量以及常量;该区域的数据在程序结束后由操作系统释放。

    (3)栈区由编译器自动分配和释放,存放函数的函数值、局部变量等;

    (4)堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

    内存四区意义:不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程。

    2. new操作符

        利用new关键字可以将数据开辟到堆区。new返回的是指向该数据类型的指针。

    (1)在堆区利用new开辟整型数据

    1. int * func(){
    2. //在堆区创建整型数据
    3. int * p = new int(10);
    4. return p;
    5. }
    6. void test(){
    7. int * p = func();
    8. cout << *p << endl;
    9. delete p;
    10. }
    11. int main(){
    12. test();
    13. return 0;
    14. }

    (2)在堆区利用new开辟数组

    1. void test(){
    2. int * arr = new int[10];
    3. for(int i=0;i<10;i++){
    4. cout << arr[i] << endl;
    5. }
    6. delete[] arr;
    7. }
    8. int main(){
    9. test();
    10. return 0;
    11. }

    3. 引用

    (1)作用:给变量起别名。

    (2)语法:数据类型  &别名  =  原名;

    1. int a = 10;
    2. int &b = a;
    3. cout << a << endl; //10
    4. cout << b << endl; //10
    5. b = 100;
    6. cout << a << endl; //100
    7. cout << b << endl; //100
    8. a = 50;
    9. cout << a << endl; //50
    10. cout << b << endl; //50

    (3)引用作为函数参数

            引用传递,形参会修饰实参。

    1. // 值传递
    2. void swap01(int n, int m){
    3. int temp = n;
    4. n = m;
    5. m = temp;
    6. cout << n << endl; // 1
    7. cout << m << endl; // 0
    8. }
    9. // 地址传递
    10. void swap02(int *p1, int *p2) {
    11. int temp = *p1;
    12. *p1 = *p2;
    13. *p2 = temp;
    14. cout << *p1 << endl; // 1
    15. cout << *p2 << endl; // 0
    16. }
    17. // 引用传递
    18. void swap03(int &n, int &m) {
    19. int temp = n;
    20. n = m;
    21. m = temp;
    22. cout << n << endl; // 1
    23. cout << m << endl; // 0
    24. }
    25. int main() {
    26. int n = 0;
    27. int m = 1;
    28. swap01(n, m);
    29. cout << n << endl; // 0
    30. cout << m << endl; // 1
    31. swap02(&n, &m);
    32. cout << n << endl; // 1
    33. cout << m << endl; // 0
    34. swap03(n, m);
    35. cout << n << endl; // 1
    36. cout << m << endl; // 0
    37. return 0;
    38. }

     

  • 相关阅读:
    云计算学习笔记——第五章 网络虚拟化
    ActiveMQ-架构设计
    redis的原理和源码-集群的原理和源码解析(上)
    docker 安装unzip命令
    前后端分离之权限管理
    NewStarCTF2023week2-游戏高手
    再谈谷歌GMS认证之Android 13
    云原生环境该怎样解决网络安全问题
    Pytorch-CNN-CIFAR10
    js对象相关操作
  • 原文地址:https://blog.csdn.net/fengbaobaola/article/details/127790752