了解一个C#define返回一个内存地址的值
这个c代码返回一个内存地址的值。了解一个C#define返回一个内存地址的值
value = MemoryRead((ptr))
MemoryRead
是#define
定义为
#define MemoryRead(A) (*(volatile unsigned char*)(A))
这是如何工作的?有人可以解释这是如何在地址处返回一个值吗?
*(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
处输入的任何地址都将直接通过您的 代码进行访问。 (如果该地址存在于存储器中)。
将来,请务必明确引用您的来源,请参阅http://*.com/help/referencing。 – Matt
我确实提到了源代码,请检查历史记录? –
这已被问及解释数百次之前。在提出问题之前,请对SO进行一些研究。 – Lundin