转换常量以用作指针

时间:2015-01-09 21:22:24

标签: c++ casting uint32-t

我一直在使用一些在ARM处理器中运行的示例代码。要读取特定的内存位置,它会向地址转换一个常量值。

例如:

我们想要读取0xa0000000

的内存值

示例代码如下:

uint32_t test_data;

const uint32_t test_address = 0xa0000000;

test_data = *(uint32_t*) test_address;

我不太了解演员*(uint32_t *)。在我看来,只有一个*就足够了。

我很感激一些解释。

感谢。

3 个答案:

答案 0 :(得分:2)

您将指针存储为uint32_t而不是指向uint32_t的指针。这就是你必须进行额外演员表的原因。

我建议如下:

#include <iostream>

int main(int argc, const char** argv) {
    volatile uint32_t* const test_address = reinterpret_cast<uint32_t*>(0xa0000000);
    uint32_t value = *test_address;
    return 0;
}

答案 1 :(得分:1)

强制转换(uint32_t*) test_addresstest_address的值重新解释为地址,并生成指向该地址的指针。这个C-cast与reinterpret_cast具有相同的效果 - 实际上,应该使用reinterpret_cast

要获取指针指向的值,即其指针,必须通过*取消引用它。这为我们提供了* ((uint32_t*) test_address),或等同于*(uint32_t*) test_address

答案 2 :(得分:0)

如果你拆分

,它会更清楚
test_data = *(uint32_t*) test_address;
分为两步

uint32_t  *p = (uint32_t*) test_address;
test_data = *p;

第一个是演员,第二个是解除引用