2012-03-05 21 views
1

私は構造体のメモリ位置を整数として格納しています。その場所に格納されている構造体を取得し、その場所のオブジェクトへのポインタを作成するにはどうすればよいですか? intの代わりにポインタを使用して特定のメモリ位置から構造体を取得するにはどうすればよいですか?

Structure object; 
int memLocation = &object; 

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

ポインタに 'int'キャストので、適切な非キャストは基本的にあなたのライン3です。 –

答えて

6

だから、何をやっていることは悪くてもK & R.の最初の版に戻って、非常に悪い形です。しかし、選択肢がないと仮定すると...

ObjectStructureの場合、&objectStructure *です。

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

うん...ちょうど10.6でMac miniで試した - gccは何も言わなかった。あらかじめ '(void *)'にキャストしてみてください。 –

+0

memLocationが既に有効なオブジェクトを指していることを知っていれば、memcpyを使う必要はありません。 '*(構造体*)memlocation'は問題ありません。 – Dave

0

通常のキャストです:

Structure *object = (Structure *)memLocation; 
0
Structure *objectPointer = (Structure *)memLocation; 
Structure ObjectCopy = *objectPointer; 
関連する問題