Давайте немного изменим вашу программу:
int main()
{
unsigned int a , b;
unsigned int *x, *y;
x = u8GetHeader();
y = u8GetHeader();
a = x[0];
b = y[1];
printf("The value of variable a = %d\n",a);
printf("The value of variable b = %d\n",b);
}
При первом вызове функции u8GetHeader
она возвращает указатель на первый элемент массива. Это присваивается переменной x
.
Каждый раз после первого вызова функция u8GetHeader
возвращает указатель на второй элемент. Это присваивается переменной y
.
Теперь, если мы «нарисуем» массив и указатели на различные элементы в нем, он может выглядеть так:
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
^ ^
| |
x y
Он должен Будьте предельно ясны, что y
указывает на значение 2
. Это y[0] == 2
. Из этого также должно быть совершенно ясно, что добавление 1
к этому индексу (т.е. y[1]
) затем приведет к получению второго элемента из y
, который является значением 3
. Итак, y[1] == 3
.
Возможно, также полезно знать, что для любого массива указателя p
и индекса i
выражение p[i]
равно точно равно *(p + i)
.
Отсюда получаем, что y[1]
, тогда должно быть *(y + 1)
., И если мы добавим стрелку для y + 1
на чертеже, мы получим:
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
^ ^ ^
| | |
x y y+1