zoukankan      html  css  js  c++  java
  • 二维数组的动态分配(new)、初始化(memset)和撤销(delete)

    来自http://blog.csdn.net/maverick1990/article/details/22829135

    一维数组

    动态分配,int *array = new int[10]

    初始化,memset(array,0,sizeof(int)*10);

    撤销,delete[] array

    二维数组m行n列

    int **d;
    d = new int *[10];
    for(int i =0;i<10;i++){
     d[i] = new int[5]   
    }

    分配一个10单元的数组指针的指针的首地址给**d,然后对其每个首地址进行遍历,

    完成一个5单元的数组的动态分配,并把首地址给*d[i],最后完成d[10][5]的动态分配。

    怎么初始化二维数组?

    void memset(void* dest,int c,size_t count)////

    sets buffers to a specified character.

    memset只能作用于一个一维数组的void *dest,因此最好的方法就是和二维数组的动态分配,

    memset最好用来初始化数组为零,初始化bool数组

    结合起来,new一个,memset一个。

    例如:

    int **d;
    d = new int *[10];
    for(int i = 0;i<10;i++){
     d[i] = new int[5];
     memset(d[i],0,5*sizeof(int));///当sizeof一个指针时,返回值为指针本身的大小而不是指针指向区域的大小,
          ///所以第三个要明确空间大小,不能sizeof(d[i]). }

    如何撤销

    for(int i = 0;i<10;i++){

    delete[] a[i];

    }

    delete[] a;

    =========================

    来个例子,

    class A{
    public:
     void test_memset(){
            ///============
            int *d;
            d = new int[10];
            memset(d,-1,sizeof(int)*10);
            for(int i = 0;i<10;i++){
                cout<<d[i]<<" ";
            }cout<<endl;
            delete[] d;
            ///==============
            int **a;
            a = new int*[10];
            for(int i = 0;i<10;i++){
                a[i] = new int[5];
                memset(a[i],-1,sizeof(int)*5);
            }
            for(int i = 0;i<10;i++){
                for(int j = 0;j<5;j++){
                    cout<<a[i][j]<<" ";
                }cout<<endl;
            }
            for(int i = 0;i<10;i++){
                delete[] a[i];
            }
            delete[] a;
    
            ///====================
            int ***c;
            c = new int**[10];
            for(int i = 0;i<10;i++){
               c[i] = new int*[7];
               for(int j = 0;j<7;j++){
                 c[i][j] = new int[5];
                 memset(c[i][j],-1,sizeof(int)*5);
               }
            }
    
            for(int i = 0;i<10;i++){
                for(int j = 0;j<7;j++){
                    for(int k = 0;k<5;k++){
                        cout<<"i-j-k"<<i<<j<<k<<"~"<<c[i][j][k]<<" ";
                    }cout<<endl;
                }cout<<endl<<endl;
            }
            ///===========
    
            for(int i = 0;i<10;i++){
                for(int j = 0;j<7;j++){
                    delete[] c[i][j];
                }
                delete[] c[i];
            }
            delete[] c;
            cout<<"destoryed done!"<<endl;
        }
    };
  • 相关阅读:
    java解决跨域
    时间格式化
    base64图片实现文件上传
    java对Base64图片的加密解密
    A5/web项目连接Oracle 12c数据库报:ORA-01017: 用户名/口令无效
    JavaScript中call如何使用?
    C# 如何让new 出来的form显示在最外层?
    因为数据库和客户端字符集不一样原因,导致显示乱码???????,解决办法
    日语键盘按键修正记录
    keybd_event 在F按键系列不起作用的解决办法
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5536785.html
Copyright © 2011-2022 走看看