我正在将一些gcc C代码移植到msvc C,它通过简单地向指针添加一个整数来完成很多指针偏移:
memcpy(data+offset, uhus->elements[i], uhsize);
看起来VS2013中的C不会允许这样做。我记得在某个地方读过,在C中向一个指针添加一个整数,用i * sizeof(指针的数据类型)来偏移它,对于void *就像在上面的行中一样,但是在其他地方可能还有其他一些类型,因为软件适用于闪存固件,我宁愿在测试时避免使用我的设备。
目前我已经更换了这样的附加内容:
static void* ptrOffset(void* ptr, int offset) {
return (void*)(((int)ptr) + offset);
}
memcpy(ptrOffset(data, offset), uhus->elements[i], uhsize);
应该诀窍,不是吗?
答案 0 :(得分:3)
如果你真的想要一个辅助功能,那么正确的定义是:
void* ptrOffset(void* ptr, int offset) {
return (char*)ptr + offset;
}
从技术上讲,不允许对void指针进行指针运算。另外,将指针转换为int将在64位平台上中断:你将丢失指针的前32位。