我有以下变量

uint32_t Value = 0x80

0x80代表存储器中的地址,例如
// Write 2 at address 0x80
*(uint32_t*)((uint32_t)0x80) = 2;

如何将Value转换为Pointer,使其指向0x80?
uint32_t *Pointer = ?? Value;

这:
(uint32_t*)(uint32_t)Value;

返回:
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

最佳答案

要处理整数到对象指针的转换,请使用可选的整数uintptr_tintptr_t类型。函数指针是另一回事。


uintptr_t

然后将void *转换为所需的类型。
#include <stdint.h>
uintptr_t Value = 0x80;
uint32_t *Pointer = (void *) Value;

如果0x80不是从有效的uint32_t *派生的,则导致未定义行为(UB)。然而,听起来OP处于具有内存映射数据位置的平台上。

关于c - 如何在不触发警告的情况下将整数值转换为指针地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45220134/

10-11 17:06