2017-03-15 8 views
1

愚かな質問のビットが、ここにあります - そのアドレスに基づいてどのように価値を得るのですか?Cのメモリアドレスから値を取得するには?

printf("%p", &loc); 

しかし、今、私は、メモリ内のそのアドレスに基づいて値を取得する必要があります。通常、私はちょうどこのようにそれをプリントアウトし、特定の値のアドレスを取得する

。それ、どうやったら出来るの?

+1

(...、float型、ダブル、それはint型でもよい)、私はLOCの種類を知らないので、タイプを使用。 C *は静的型言語です。 – StoryTeller

+0

locは#define locとして置くことができます0x100 –

+0

値のアドレスを持っていれば、ポインタがあります。逆参照演算子を使用して、値を取得したポインタを参照解除する必要があります。ポインターのタイプは、読み取りたいデータタイプと一致していなければなりません。 – harper

答えて

3

(例えばハードウェアレジスタなど)特定のアドレス0x12345678のアクセスの標準的な方法は次のとおりです。

(volatile uint32_t*)0x12345678 

あなたはそれが変数であるかのように、そのアドレスの内容を使用したい場合は、あなたが持っている可能性のいずれかポインタがポイント、またはマクロを作る:

#define REGISTER (*(volatile uint32_t*)0x12345678) 
3

addressof演算子は、ポインタ型のオブジェクトを返します。ポインタの値は、指し示されたオブジェクトのメモリアドレスです(loc)。あなたは間接参照演算子でポインタを参照解除することにより、尖ったメモリアドレスにオブジェクトの値を取得できます。

*(&loc) 
1

アドレスは何の種類を持っていませんが、あなたがフォローラインを使用することができ、あなたはそれを知っていると仮定すると:

printf("%d", *(int*)p); 

あなたはそこにあるかどうか確認するためにいくつかのタイプをテストすることができます:

printf("%d", *(int*)p); 
printf("%f", *(float*)p); 
... 

はアドレスは、メモリを現在のプロセスに属し、そうでない場合はすることが必要であること、注意してくださいprotectiあなたのプロセスを殺すでしょう。

+5

'*(int *)p'と' *(float *)p'を意味しましたか? – Ryan

1

あなたは単にポインタが指している変数の値を取得するには、アスタリスクを使用することができます。 loc` `の効果的な種類が何であるかに依存する

type x = *loc 

私は

関連する問題