定义二维数组char array[x][y];
1.只定义个一维的就可以了
char *array;
array = new char[x*y];
访问的时候*(array+i*y+j)表示array[i][j]
2.定义一个二维数组
char **array1
array1 = new char *[x];
for(i=0;i<x;++i)
array1[i] = new char[y];
...用的时候可以直接array1[i][j]
注意delete
for(i=0;i<x;++i)
delete[] array1[i];
delete[] array1;
3.要用的方便,可以在array上加定义一个指针变量。
char *array = new char[x*y];
char **array2;
array2 = new char *[x];
for(int i=0;i<x;++i)
array2[i] = array + i*y;
...用起来还是array2[i][j],但二维数组已经是一块连续内存,这是和第二种方法区别的地方,感觉这是比较适合用二维数组的习惯。
delete[] array2;
char *array;
array = new char[x*y];
访问的时候*(array+i*y+j)表示array[i][j]
2.定义一个二维数组
char **array1
array1 = new char *[x];
for(i=0;i<x;++i)
array1[i] = new char[y];
...用的时候可以直接array1[i][j]
注意delete
for(i=0;i<x;++i)
delete[] array1[i];
delete[] array1;
3.要用的方便,可以在array上加定义一个指针变量。
char *array = new char[x*y];
char **array2;
array2 = new char *[x];
for(int i=0;i<x;++i)
array2[i] = array + i*y;
...用起来还是array2[i][j],但二维数组已经是一块连续内存,这是和第二种方法区别的地方,感觉这是比较适合用二维数组的习惯。
delete[] array2;
二维数组的初始化:如果把一维数组初始化办法照搬过来就会发现对于动态分配的二维数组并不适用。这就要理解到memset这个函数三个参数的含义。MSDN对memset的描述如下:
memset
Sets buffers to a specified character.
void*memset(void*dest,intc,size_tcount);
可见memset只能作用于一个一维数组void*dest,因此最好的办法就是和二维数组的动态分配结合起来,new一个,memset一个。具体写法如下:
int **array;
array=new int *[10];
for(int i=0;i<10;i++)
{
array[i]=new int [5];
memset(array[i],0,5*sizeof(int));
}