• C/C++中new的使用规则


    本人未重视new与指针的使用,终于,终于在前一天船翻了,而且没有爬上岸;

    故此,今特来补全new的用法,及其一些规则;

    话不多说

    C++提供了一种“动态内存分配”机制,使得程序可以在运行期间,根据实际需求,要求操作系统临时分配一片内存空间用于存放数据;

    通过new运算符来实现;

    new实现一维指针:

    1 int * P;        
    2 P = new int;    //开辟一个存放整数的空间,并返回一个存储空间的地址(即指针);
    3 * P = 5;
    4 
    5 int * P = new int(5);     //与上相等 
    6 int * Y = new int;       
    7 int * Y = new int(100);  //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个该存储空间的地址;

    分配一个任意大小的数组:

    1 T * P;
    2 P = new T[N];        //T是任意类类型名, N代表元素个数
    3  
    4 int *A = new int[10];     //开辟一个存放10个整数(数组)的空间,返回首元素的地址

    二维数组:  (以5行5列的矩阵为列)

    1     int i;
    2     int row = 5,list = 5;
    3     int **Matrix;
    4     Matrix = new int *[row];        //给一维指针开辟空间 
    6     for(i = 0;i<row;i++)
    7         Matrix[i] = new int [list];                //第二维空间开辟 

    一维二维的两种方式均可使用;

    1 int * Matrix = new int[row * list];        //当成一维数组连续开辟

    简化二维指针的开辟,通过 Matrix [ i * (list + 1) + j ]来访问第i行第j列的数据;

    开辟指针的释放:

    1 int * P = new int;
    2 * P = 5;
    3 delete P;
    4 
    5 int * P = new int [10];
    6 P[0][0] = 1;
    7 delete [] P;

    用new运算符动态分配的内存空间,要用delete运算符释放,否则,会出现“内存泄漏”;

    上述矩阵的释放方式:

    1     for(i = 0;i < row;i++)
    2         delete [] Matrix[i];
    3     delete [] Matrix;
    4 
    5 //
    6 //
    7     delete [] Matrix;

    2019-11-02    16:56:02

    下次学到再来;

    发现错误,修改了一下,贴一个正确的二维数组的例子;

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int i,j;
     8     int row = 5,list = 5;
     9     int **Matrix;
    10     Matrix = new int *[row];       
    11     for(i = 0;i<row;i++)
    12     {
    13         Matrix[i] = new int [list];                    
    14         for(j = 0;j<list;j++)
    15              Matrix[i][j] = 1;
    16     }
    17     for(i = 0;i<row;i++)
    18     {
    19         for(j = 0;j<list;j++)
    20             cout<<Matrix[i][j]<<" ";
    21         cout<<endl;
    22     } 
    23     for(i = 0;i<row;i++)
    24         delete [] Matrix[i];
    25     delete [] Matrix;
    26     return 0;
    27 } 

    2020-01-11

  • 相关阅读:
    软工实践寒假作业(2/2)
    Java 内存溢出分析
    个人作业——软件工程实践总结&个人技术博客
    个人作业——软件测评
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次作业-疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    个人作业——软件工程实践总结&个人技术博客
    配合springboot的快速运维脚本
  • 原文地址:https://www.cnblogs.com/2015-16/p/11782595.html
Copyright © 2020-2023  润新知