如何从C中的“原始”内存中读取/写入类型值?

时间:2012-07-15 09:52:35

标签: c memory casting memory-access

我如何制作这样的作品?

void *memory = malloc(1000);  //allocate a pool of memory
*(memory+10) = 1;  //set an integer value at byte 10
int i = *(memory+10);  //read an integer value from the 10th byte

3 个答案:

答案 0 :(得分:6)

简单示例:将内存视为unsigned char数组

void *memory = malloc(1000);  //allocate a pool of memory
uint8_t *ptr = memory+10;  
*ptr = 1 //set an integer value at byte 10
uint8_t i = *ptr;  //read an integer value from the 10th byte

您也可以使用整数,但是您必须注意一次设置的字节数。

答案 1 :(得分:4)

规则很简单:

  • 每个指针类型(函数指针除外)都可以转换为void *,而不会丢失。
  • 您无法对void *指针执行指针运算,也无法取消引用它们
  • 根据定义,
  • sizeof(char)等于1;所以递增一个字符指针意味着“添加1”到“原始”指针值

由此可以得出结论,如果你想执行“原始”指针算法,你必须转换为char *。

答案 2 :(得分:3)

所以,通过“工作”我假设你的意思是“如何在void*上取消引用/执行指针算术”?你不能;如果你只是关心阅读大块内存,你必须将其强制转换为char*。当然,如果是这种情况,只需将其声明为char*即可。