我已经阅读了关于stackoverflow的几篇帖子,例如size_t vs. uintptr_t和Is sizeof(size_t) == sizeof(void*) always true?,并且理解根据C ++标准,SIZE_T和void *的大小可以不同,以考虑16位等体系结构分段架构。
所以我想将我的场景平台限制为Windows,无论是x86,x64,WoA(Windows on Arm):在Windows上,如果我在malloc中创建一个void *类型的指针,我想要在将指针算术传递给memcpy之前做指针运算,我必须做类似的事情:
void* p = malloc(100);
memcpy(reinterpret_cast<void*>((reinterpret_cast<SIZE_T>(p) + offset), p2, 100);
这似乎非常繁琐,特别是如果你不得不在各地乱扔这种类型的铸件(我正在处理各种偏移)。鉴于这是在Windows平台上,我想知道是否有一些简化可以减少这种类型的样板代码?
感谢。
答案 0 :(得分:6)
将其强制转换为unsigned char *
并使用该算法进行指针运算。
答案 1 :(得分:0)
根据您的描述,我认为您只想:
memcpy( (char *)p + offset, p2, 100);