二維數組的動態分配(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;
    }
};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM