ptr[1]
- это структура, на которую указывает ptr + 1
(точно так же, как *(ptr+1)
), b_temp
получает указатель на структуру, поэтому вам нужно передать адрес a_temp->ptr[1]
, то есть &a_temp->ptr[1]
.
expression | type
---------------------------
a_temp->ptr | struct b*
a_temp->ptr[1] | struct b
&a_temp->ptr[1] | struct b*
a_temp->ptr + 1 | struct b*
b_temp | struct b*
Edit:
если у вас есть указатель, скажем, int * x
, то следующие выражения идентичны: x[1]
и *(x+1)
, и они оба используют адрес x+1
. другими словами, значение этих выражений является типом переменной, на которую указывает указатель x
, в данном случае это int
, поскольку x
равно int *
(указатель на int
), он содержит адрес для переменной int
.