void** 是指向void的指针.
void * volatile *是指向volatile-qualified-pointer-to-void的指针.(从右到左阅读声明,非常多.看到这个.)
这意味着简单的英语pREG可能是指向某种硬件索引寄存器的指针,而该寄存器又包含一个地址.为了告诉编译器这个索引寄存器可以随时更新,寄存器本身应该被视为volatile.
一种更易读的方式可以写出:
typedef void* volatile reg_add_t;
reg_add_t* pREG = (reg_add_t)0x20081004u;
Run Code Online (Sandbox Code Playgroud)
请注意,void*为此目的使用是值得怀疑的.该寄存器将具有已定义的用途,可能应该是a uint32_t * volatile或uint8_t * volatile替代.