Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прочитать значение по известному адресу.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Troll
Приветствую.

Вопрос в следующем.

имеется указатель на структуру данных.
void * my_struct;

этому указателю присваивается значение адреса памяти;

есть функция void f(int param);
Внутри функции f необходимо получить значение по адресу, хранящемуся в my_struct.

Для этого через "param" передаю адрес указателя my_struct.
f((int)&my_struct)

Внутри функции
void f(int param) {
void *p;
...
}

Проще говоря должно p == my_struct.
И вот с получением значения внутри функции, ничего не получается.
Компилятор все время ругается на несоответствие типов.


Подскажите, пожалуйста, как это сделать.

PS можно, конечно сделать указатель my_struct глобальным и не париться (в общем сейчас так и есть).
но вопрос возник и хочется его решить.
aaarrr
Зачем мешать кучу разных типов (void *, int)? Зачем передавать адрес указателя, а не сам указатель?

Казалось бы все просто:
Код
MY_STRUCT *my_struct;

void f(MY_STRUCT *param)
{
    param->...
}
Палыч
Цитата(Troll @ May 6 2011, 16:45) *
Подскажите, пожалуйста, как это сделать.

Можно сделать так
Код
p= *(void **)param;
но, такая мешанина типов как у Вас, наводит на мысль, что структура ПО и взаимодействие между отдельными частями программы плохо продуманы
aaarrr
Цитата(Troll @ May 6 2011, 16:45) *
Внутри функции f необходимо получить значение по адресу, хранящемуся в my_struct.
Подскажите, пожалуйста, как это сделать.

Получить что-либо из структуры, имея только указатель типа void не получится. Нужен именно указатель на структуру.
Палыч
Цитата(aaarrr @ May 6 2011, 19:36) *
Получить что-либо из структуры, имея только указатель типа void не получится. Нужен именно указатель на структуру.
Ну, это - Вы слегка погорячились. Получить можно всё, что хочешь...
aaarrr
Цитата(Палыч @ May 6 2011, 19:50) *
Ну, это - Вы слегка погорячились. Получить можно всё, что хочешь...

Поле неизвестной структуры ну никак нельзя.

Но таки да, погорячился, т.к. my_struct, значение которого нужно получить, - это void *. В любом случае кошмарное нагромождение.
Troll
Цитата(Палыч @ May 6 2011, 19:32) *
Можно сделать так
Код
p= *(void **)param;
спасибо. То что надо.


Цитата(Палыч @ May 6 2011, 19:32) *
но, такая мешанина типов как у Вас, наводит на мысль, что структура ПО и взаимодействие между отдельными частями программы плохо продуманы

ПО уже есть. Надо лишь добавить несколько строк...
Не писать же все с нуля sm.gif

Спасибо за помощь.
demiurg_spb
Цитата(Troll @ May 12 2011, 17:58) *
Не писать же все с нуля sm.gif
Часто имеет смысл избавится от говнокода...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.