我正在尝试使用 void* 在内存中存储几个整数,然后检索它们,但它不断抛出“算术中使用的‘void *’类型的指针”警告。
void *a = new char[4];
memset(a, 0 , 4);
unsigned short d = 7;
memcpy(a, (void *)&d, 2);
d=8;
memcpy(a+2, (void *)&d, 2); //pointer of type ‘void *’ used in arithmetic
/*Retrieving*/
unsigned int *data = new unsigned int();
memcpy(data, a, 2);
cout << (unsigned int)(*data);
memcpy(data, a+2, 2); //pointer of type ‘void *’ used in arithmetic
cout << (unsigned int)(*data);
结果符合预期,但我担心这些警告可能会在某些编译器上变成错误。还有其他我不知道的方法吗?
我知道这在正常情况下可能是一种不好的做法,但问题陈述要求以 2 字节数据包的形式存储和发送无符号整数。如果我错了,请纠正我,但根据我的理解,使用 char* 而不是 void* 会占用 3 个字节的 3 位数字。
最佳答案
a+2
,其中a
是一个指针,意思是增加指针,为指针类型的两项留出空间。例如,如果 a
是 int32 *
,a + 2
将表示“一个位置加 8 个字节”。
由于 void *
没有类型,它只能尝试猜测 a + 2
是什么意思,因为它不知道类型的大小推荐。
关于C++ void* 内存遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19672173/