我有以下变量
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_t
或intptr_t
类型。函数指针是另一回事。
以下类型指定了一个无符号整数类型,其属性是
void
可以将任何有效指针都转换为该类型,然后再转换回给的指针void
,其结果将等于原始指针C11dr 7.20.1.4 1
uintptr_t
然后将转换void *
为所需的类型。
#include <stdint.h>
uintptr_t Value = 0x80;
uint32_t *Pointer = (void *) Value;
如果0x80不是来自有效的uint32_t *
,则导致未定义的行为(UB)。然而,听起来OP处于具有内存映射数据位置的平台上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句