Я не знаком с флэш-памятью в контроллере AVR, но в C мы обычно используем void*
, чтобы указать часть памяти, которую мы не знаем, какой тип она содержит (в отличие, например, от *). 1002 * представляет адрес фрагмента памяти, где его содержимое следует интерпретировать как int
).
В первой функции передается void**
: вы передаете адрес, на котором находится переменная типа void*
, затем, выполнив *Address = Temp;
, заполняете область памяти, указанную Address
(таким образом, из функция переменная обновляется).
Во второй функции вы передали intptr_t
: здесь тот же трюк не работает, так как вы присваиваете локальной копии адреса памяти StructAddr
новое значение, которое затем отбрасывается после завершения функции.
Как сказано в других комментариях, вам нужно intptr_t*
в сигнатуре второй функции и вам необходимо выполнить следующее *Address = Temp
.