我正在读一个与硬件寄存器接口的C程序。此人一直使用十六进制数作为数组的索引,例如:
app_base_add[0x30]
我知道a[I]是指*(a+I),即*(a+(I*sizeof(typeof(a))),所以十六进制索引可能是地址空间w.r.t 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);
最佳答案
写0x30或48作为索引是没有区别的,如果程序员说他的内存文档是用十六进制值写的,那么对程序员来说可能更容易阅读,但这只是一个品味问题。
例如
app_base_add[0x30>>2]=0x1;
is the same as writing app_base_add[12]=0x1;
or even app_base_add[0x0C]=0x1;
关于c - 在C中的数组索引中使用十六进制值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12973411/