2012-03-05 4 views
1

У меня есть ячейка памяти структуры, хранящаяся как целое число. Как я могу получить структуру, хранящуюся в этом месте, и сделать указатель на объект в этом месте?Как я могу получить структуру из определенной ячейки памяти?

Structure object; 
int memLocation = &object; 

Structure objectCopy = (objectAtLocation) memLocation; 
Structure *objectPointer = (pointerToLocation) memLocation; 
+0

закиньте 'int' к указателю. –

ответ

6

Использования int с вместо указателей очень плохая форма, восходящая еще к первому изданию К & Р. Итак, что вы делаете это плохо. Но если у вас нет выбора ...

если Object является Structure, то &object является Structure *. Таким образом, собственно не-бросок в основном ваша линия 3:

Structure *objectPointer = (Structure *) memLocation; 
+1

+1. Для преобразования целых чисел и указателей всегда используйте 'intptr_t' или' uintptr_t'. –

+0

Я знаю, что обычно я должен использовать указатель, но мне нужно иметь возможность управлять местоположением байтом вручную. –

+0

Как бы строка 3 выглядела в реальной программе? –

2
int memLocation = (int)&object; 

Structure *objectPointer = (Structure *) memLocation; 
Structure object; 
memcpy(&object, (void*)memlocation, sizeof(Structure)); 
+0

Если я использую строку 2, я получаю сообщение об ошибке в Xcode. –

+0

хм ... просто попробовал mac mini с 10.6-gcc ничего не сказал. Попытайтесь направить на '(void *)' заранее. –

+0

Если он знает, что «memLocation» уже указывает на действительный объект, нет необходимости использовать memcpy. '* (Структура *) memlocation' в порядке. – Dave

0

Обычный литая:

Structure *object = (Structure *)memLocation; 
0
Structure *objectPointer = (Structure *)memLocation; 
Structure ObjectCopy = *objectPointer;