Я создал 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 **?