0
我有一個在嵌入代碼遇到如下定義:雙星在指針定義
#define REG_ADD 0x20081004
#define pREG ((void * volatile *)REG_ADD)
爲什麼有2 *
在pREG
定義是什麼?這是什麼意思?
我有一個在嵌入代碼遇到如下定義:雙星在指針定義
#define REG_ADD 0x20081004
#define pREG ((void * volatile *)REG_ADD)
爲什麼有2 *
在pREG
定義是什麼?這是什麼意思?
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 * volatile
或uint8_t * volatile
。
指針指針。 –
這是正確的語法,但它看起來仍然是一個糟糕的主意。你能提供上下文嗎? – Olaf
@ dandi-kain:在REG_ADD上做一個printf(),它的地址,然後是printf()pREG,DE-refferenced pREG和pREG的地址,這應該會幫助你看看發生了什麼...... –