Я создал 2D-массив и попытался напечатать определенные значения, как показано ниже:
int a[2][2] = { {1, 2},
{3, 4}};
printf("%d %d\n", *(a+1)[0], ((int *)a+1)[0]);
Вывод:
3 2
Я понимаю, почему 3
- это первый вывод (a+1
указывает на вторую строку, и мы печатаем его элемент 0th
.
Мой вопрос касается второго выхода, т.е. 2
. Я предполагаю, что из-за typecasting a
как int *
, 2D-массив обрабатывается как 1D-массив, и поэтому a+1
действует как указатель на элемент 2nd
, и поэтому мы получаем вывод как 2
.
Правильны ли мои предположения или есть ли какая-то другая логика?
Кроме того, изначально какой тип a
обрабатывается как указатель int (*)[2]
или int **
?