二维数组的动态分配(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;
    }
};
原文地址:https://www.cnblogs.com/li-daphne/p/5536785.html