为什么 0x40010800 + 0x0C 等于 0x40010830?

why 0x40010800 + 0x0C equals 0x40010830?

我尝试访问 RCC_APB2ENR 注册作为在 stm32nucleo f103rb 上闪烁绿色 LED 的第一步

然后我将 0x0C 添加到 0x40010800(RCC 基地址)。

预期结果为 0x4001080C 但实际结果为 0x40010830!!!

好像0x0C被左移了两次,但我不明白为什么会这样。

甚至在 Ubuntu,同样的事情也发生了。

请告诉我

开发板:stm32 nucleo f103rb IDE:uVision 5

RCC_BASE 指向 unsigned int。在您的平台上,此类型的大小为 4 个字节。

在对指针进行加法或减法操作时,您是通过操作数乘以元素大小来增加(或减少)地址。

详情看Pointer Arithmetic