Сначала вы попробовали, работает ли этот код, потому что обычно я пишу Thing* my_thing = things + i
, чтобы получить каждую вещь в массиве.
Вы даете функции указатель на массив Thing, а не массив Thing.Вот почему things
- это адрес первой вещи.
Чтобы получить следующую, нужно добавить i к базовому указателю, чтобы добраться до нужного адреса.
Как следующая строкаработает зависит от типа my_thing.
Если это указатель, как я объявил, он фактически отредактирует содержимое массива в куче и создаст только копию адреса в my_thing.Однако строка должна быть (*my_thing).a = 10;
, чтобы вы фактически указали значение в адресе, на который указывает указатель.
Если это Thing my_thing = *(things + i)
, то будет создана локальная копия значения и следующая строкаизменит эту копию вместо исходного массива.
Надеюсь, этот ответ поможет вам понять, что на самом деле происходит.