Двумерные массивы.

Связь массивов и указателей.

 

Имя одномерного массива компилятор интерпретирует как константный указатель на нулевой элемент массива.

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 }}}