Двумерные массивы.
Связь массивов и указателей.
Имя одномерного массива компилятор интерпретирует как константный указатель на нулевой элемент массива.
ar[0]=1 |
ar[1]=2 |
ar[2]=3 |
ar[3]=4 |
ar[4]=5 |
ar
p
В памяти:
int *p=ar;
int *int [];
int tmp=ar[i];
равнозначно
tmp=p[i];
tmp=*(p+i);
tmp=*(ar+i);
переместим указатель к следующему элементу массива, но не ar++(ошибка!)
p++; //ar++i
Двумерные массивы можно представить как одномерный, каждым элементом которого является строка (т.е. одномерный массив). Имя двумерного массива компилятор интерпретирует как константный указатель на нулевую строку.
int ar[2][3]={{1;2;3},{4;5;6}};
ar[0][0]=1 |
ar[0][1]=2 |
ar[0][2]=3 |
ar[1][0]=4 |
ar[1][1]=5 |
ar[1][2]=6 |
int ar[N][M];
int sum!=0;
for (int i=0; i<N; i++)
{
for (int j=0; j<M; j++)
sum+=ar[i][j];
int *p=&ar[0][0];
for (int i=0; i<sizeof(ar)/sizeof(int); i++)
{
sum+=*p;
p++;
}
}
Трёхмерные массивы.
Имя трёхмерного массива компилятор интерпретирует как константный указатель на нулевой слой (нулевой двумерный массив).
int ar[2][3][4]={{{1,2,3,4},{5,6,7,8},{9,10,11,12}},{{-1,-2,-3,-4},{-5,-6,-7,-8},{-9,-10, -11,-12 }}}