C中*((volatile UINT32 *)(a))的含义

时间:2014-02-10 09:07:15

标签: c volatile

的含义是什么?
 *((volatile UINT32*)(a)) ?

用C语言编写?

举个例子。

1 个答案:

答案 0 :(得分:3)

在第一次将其强制转换为“指向易变a的指针”之后,它取消引用UINT32

有更多的括号比需要的更多,最好写成:

*(volatile UINT32 *) a

这也是一样的。你希望在这里有更多的代码,当然,要么写:

*(volatile UINT32 *) a = 4711;

4711写入a中包含的地址,确保(由于volatile)写入未被优化,即使它从编译器的角度来看似乎毫无意义观点。

或阅读:

const UINT32 packetCounter = *(volatile UINT32 *) a;

读取a中地址的当前值,并将其存储在名为packetCounter的本地常量变量中。如果a是某个I / O寄存器的地址,那么这就是它的样子。同样由于volatile,读取必须发生,它不能被优化或缓存,即使它对编译器来说似乎没有意义。这在I / O寄存器中很常见。