• 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. }

     

  • 相关阅读:
    Android:使用Jetpack Compose画渐变背景
    474922-26-4,DSPE-PEG-NH2,DSPE-PEG-amine,磷脂-聚乙二醇-氨基饱和18C磷脂
    stable diffusion webui中的modules/processing模块
    ES6中新增加的Map和Set数据结构的使用场景
    关于栈迁移的那些事儿
    Callable、Future和FutureTask
    Google Earth Engine(GEE)——10分钟短文快速了解地球引擎和森林面积损失计算
    电子协会 C语言 1级 29 、 对齐输出
    RPA是什么?怎么成为RPA高手?
    SpringBoot Banner图修改
  • 原文地址:https://blog.csdn.net/fengbaobaola/article/details/127790752