Pro*_*gga 5 c embedded pointers integer
我有以下变量
uint32_t Value = 0x80
Run Code Online (Sandbox Code Playgroud)
0x80代表存储器中的地址,例如
// Write 2 at address 0x80
*(uint32_t*)((uint32_t)0x80) = 2;
Run Code Online (Sandbox Code Playgroud)
如何将Value转换为Pointer,使其指向0x80?
uint32_t *Pointer = ?? Value;
Run Code Online (Sandbox Code Playgroud)
这个:
(uint32_t*)(uint32_t)Value;
Run Code Online (Sandbox Code Playgroud)
返回:
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
Run Code Online (Sandbox Code Playgroud)
要处理整数到对象指针的转换,请使用可选的整数uintptr_t或intptr_t类型。函数指针是另一回事。
以下类型指定一个无符号整数类型,其属性为任何有效的指向的指针
void都可以转换为该类型,然后转换回指向 的指针void,结果将比较等于原始指针 C11dr 7.20.1.4 1
uintptr_t
Run Code Online (Sandbox Code Playgroud)
然后将 转换void *为所需的类型。
#include <stdint.h>
uintptr_t Value = 0x80;
uint32_t *Pointer = (void *) Value;
Run Code Online (Sandbox Code Playgroud)
如果 0x80 不是从有效的 派生的,则会uint32_t *导致未定义的行为(UB)。然而,听起来 OP 是在一个具有内存映射数据位置的平台上。