了解一个C#define返回一个内存地址的值

问题描述:

这个c代码返回一个内存地址的值。了解一个C#define返回一个内存地址的值

value = MemoryRead((ptr)) 

MemoryRead#define定义为

#define MemoryRead(A) (*(volatile unsigned char*)(A)) 

这是如何工作的?有人可以解释这是如何在地址处返回一个值吗?

+2

这已被问及解释数百次之前。在提出问题之前,请对SO进行一些研究。 – Lundin

*(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://*.com/help/referencing。 – Matt

+0

我确实提到了源代码,请检查历史记录? –