Сравним адресацию статического и динамического двухмерного массива. Вот код:
#include <stdio.h>
int main()
{
printf("Dynamic array: \n");
int **a = new int* [5];
for (int i=0; i<5; i++)
a[i] = new int [5];
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++)
printf("%d ", &a[i][j]);
printf("\n");
}
printf("\n");
delete[] a;
int b [5][5];
printf("Static array: \n");
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++)
printf("%d ", &b[i][j]);
printf("\n");
}
printf("\n");
return 0;
}
В итоге адреса ячеек в статическом массиве идут все подряд. В динамическом массиве нет: строка подряд, потом пропускается ячейка, потом опять строка. Как это так получается? Что лежит в пропущенной ячейке?