我正在通過與硬件寄存器接口的C程序進行讀取。該人已使用十六進制數爲索引到陣列如:在數組索引中使用十六進制值C
app_base_add[0x30]
我知道,A [1]表示*(A + I),其是*(A +(I *的sizeof(typeof運算 (a)))),所以十六進制索引可能是地址空間中app_base_add所需內存位置的偏移量。
這是正確的嗎?
並且還給出,說:
#define mm2s_start_add 0xc0000000;
如何將這些作業是使用彼此不同?
volatile unsigned int *app_base_add;
app_base_add[0x30>>2]=0x1;
app_base_add[0x30>>2]=1<<2;
app_base_add[0x30>>2]=((unsigned int)mm2s_start_add); //is this assignment valid??
app_base_add[0x30>>2]=((unsigned int *)mm2s_start_add);
無論你寫索引以十六進制或十進制(或者八進制,如果你願意的話)的符號對編譯器沒有任何影響。沒有任何。最後一個賦值有點問題,因爲你首先將一個整數轉換爲一個指針,然後將該指針轉換爲一個整數。如果編譯器是寬鬆的,它可能會按原樣編譯它,否則在轉換爲指針類型後,您需要顯式強制轉換爲整數類型。 –
@DanielFischer:十六進制和十進制對編譯器有所作用。這在數組索引中不太可能發生,但可能會產生影響。看到我的評論下面的答案之一。 –
@EricPostpischil對,如果你想要負指數,你可能需要顯式轉換爲帶十六進制符號的帶符號類型。儘管重要的情況很少,但我應該提到它。 –