2016-06-28 1 views
0

このcコードは、メモリアドレスに値を返します。メモリアドレスに値を返すC#defineの理解

value = MemoryRead((ptr)) 

MemoryRead#define

この作業を行う方法
#define MemoryRead(A) (*(volatile unsigned char*)(A)) 

として定義されていますか?これはどのようにアドレスで値を返すかを誰かが説明できますか?

+2

これまでに何百回も尋ねられ、説明されています。質問をする前に、SOに関するいくつかの調査をしてください。 – Lundin

答えて

3

*(addr)は、addrに格納された値を返します。

上記コードは自明です。あなたが乾いたら走ります。

value = MemoryRead((ptr))

value = (*(volatile unsigned char*)((ptr)))

#defineになり考えてみましょう最初は本当に不可解に見えます。これを理解する方法は、それを断片に分解することです。as done here;

まず、

unsigned char 

たちは、バイトサイズのメモリ・ロケーションを使用していることを意味します。バイトは8ビットである ワイドです。

unsigned char * 

は、バイトサイズの位置を指すポインタを宣言していることを意味します。

(unsigned char *) (ptr) 

は、アドレスptrを指すバイトサイズのポインタを意味します。 Cコンパイラ は、アドレスptrを参照します。アセンブリコードは、ロード(LD)およびストア(STR)命令でptr を使用して終了します。

(*(unsigned char *)(ptr)) 

左から最初のアスタリスクは、我々はアドレスptrで 値を操作することを意味します。 *は「 ポインタが指す値」を意味します。値がそれを知っているコンパイラ なく変更することがありますよう

volatile 

揮発性の力の負荷を発行したり、いつでも MemoryReadを保存するために、コンパイラがアクセスされます。

ptrに入力された住所は、 コードで直接アクセスされます。 (アドレスがメモリ内にある場合)

+0

今後は、http://stackoverflow.com/help/referencingでソースを明確に参照してください。 – Matt

+0

私はソースに言及し、履歴をチェックしましたか? –

関連する問題