C++ void* 内存遍历

标签 c++ memory-management void-pointers

我正在尝试使用 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是一个指针,意思是增加指针,为指针类型的两项留出空间。例如,如果 aint32 *a + 2 将表示“一个位置加 8 个字节”。

由于 void * 没有类型,它只能尝试猜测 a + 2 是什么意思,因为它不知道类型的大小推荐。

关于C++ void* 内存遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19672173/

相关文章:

c - 关于指针的问题

c++ - 默认情况下,局部变量和全局变量是如何初始化的?

c++ - 如何在 Eclipse IDE 中添加编译器选项

docker - 为特定的Docker容器Debian设置max_map_count

javascript - 你能找到分配给一个对象(node.js)的内存吗?

c - 关于取消引用 'void *' 指针

c - 类型为 void 的数组

c++ - 二进制数。检查以确保二进制输入是二进制时出错

c++ - 带有列表的 std::generate_n 函数

ios - 在 iOS 中不使用 @property 可以创建类本地引用吗?