指针定义中的双星

时间:2017-04-19 03:24:31

标签: c embedded firmware

我在嵌入式代码中遇到了以下定义:

*

为什么pREG定义中有2个private?这是什么意思?

1 个答案:

答案 0 :(得分:5)

void**是指向void的指针。

void * volatile *是指向volatile-qualified-pointer-to-void的指针。 (几乎从右到左阅读声明。See this。)

这意味着简单的英语是pREG可能是指向某种硬件索引寄存器的指针,而该寄存器又包含一个地址。为了告诉编译器该索引寄存器可以随时更新,寄存器本身应该被视为volatile

编写相同内容的更易读的方法是:

typedef void* volatile reg_add_t;
reg_add_t* pREG = (reg_add_t)0x20081004u;

请注意,void*用于此目的是值得怀疑的。该寄存器将具有已定义的用途,可能应该是uint32_t * volatileuint8_t * volatile