int main()
{
int a[3][4]={1,2,3,4,4,3,2,1,1,3,4,1};
printf("\n%d", (a+1));
printf("\n%d", *(a+1));
printf("\n%d", (a+1)+2);
printf("\n%d", *(a+1)+2);
printf("\n%d",*(*(a+1)+2));
}
Почему у нас есть адреса, несмотря на уважение во всех, кроме последнего?Указатели на различие в c
Кроме того, согласно моему уровню понимания
a+1 = 1st position of array
*(a+1) = value at first position
2 в т.е. данном случае
*(a+1) + 2 = 4th position in array
*(*(a+1)+2)) = value at 4th position
который является 4 в этом случае.
Как получается выход 2? Могу ли я получить какое-то объяснение? Выход:
'a' представляет собой массив из 3 массивов, каждый из которых имеет размер 4. Таким образом,' * (a + 1) '(который является просто причудливым способом записи' a [1] '), является вторым массивом размера 4 , то есть указатель. Использование '% d' для печати указателей дает вам большие числа, которые вы видите. '(a + 1) + 2' является просто' (a + 3) 'или эквивалентно' & a [3] ', все еще указателем. Ваша последняя строка - единственная, которая фактически указывает на целое число. –