如果动态分配一个2维数组,3行4列,
int **map = new int*[3];
for (int i = 0; i < 3; i++)
{*(map + i) = new int[4];
}
当这样写是动态申请的内存,内存空间为如下所示。可以看出动态申请的二维数组中内存不是连续的,
for (int i = 0; i < 3; i++)
{for (int j = 0; j < 4; j++){cout << &map[i][j] << "\t";}cout << endl;
}
/*
0040AF80 0040AF84 0040AF88 0040AF8C
0040AFD0 0040AFD4 0040AFD8 0040AFDC
0040B020 0040B024 0040B028 0040B02C
*/
如果直接构造一个二维数组,则内存空间为如下,可以看出内存空间是连续的,
int m[3][4];
int * p = *m;
for (int i = 0; i < 12; i++)
{cout << (p+i) << endl;
}
/*
003AFC40
003AFC44
003AFC48
003AFC4C
003AFC50
003AFC54
003AFC58
003AFC5C
003AFC60
003AFC64
003AFC68
003AFC6C
*/