Ваш учитель по математике должен объяснить немного легче f рвые. Для 1D массива
int 1d_arr[] = {1,2,3,4,5};
1d_arr[2]
эквивалентны *(1d_arr + 2)
, то есть получить элемент массива 1d_arr
который является 2 * sizeof(1d_arr[2])
= 8
байт далеки от базового адреса или 8/4
я = 2 я элемента, который является 3
. Обратите внимание, что базовый адрес равен 1d_arr
(преобразование массива в указатель).
Для 2D массива
int 2d_arr[2][3] = { {0,1,2}
{3,4,5}
};
2d_arr[0][2]
эквивалентен *(*(2d_arr + 0) + 2)
, т.е. получить элемент массива 2d_arr
, который 0*sizeof(2d_arr[0]) + 2*sizeof(2d_arr[0][2])
= 8
байт далеки от базового адреса или 0/4 + 8/4
го = 2 я элемента массив 2d_arr[0]
, который является 2
.
для 3d массива
int 3d_arr[2][2][3] = { {0,1,2}, {3,4,5}
{6,7,8}, {9,10,11}
};
3d_arr[1][0][2]
эквивалентен *(*(*(3d_arr + 1) + 0) + 2)
, т.е. получить элемент массива 3d_arr
, который 1*sizeof(3d_arr[1]) + 0*sizeof(3d_arr[1][0]) + 2*sizeof(3d_arr[1][0][2])
= 1*(2*3*4) + 0*(3*4) + 2*4
= 32
байт далек от базового адреса или 24/4 + 0/4 + 8/4
= 6 + 0 + 2
= 2 я элемента 0 th элемент (массив) массива 3d_arr[1]
.
* девятый элемент массива, начиная с нуля *, очевидно, неправильно. Проблема настолько проста, что учитель, допустивший ошибку, должен быть вызван на него. – 2501