來自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; } };
