7

我该如何做这样的事情?

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
4

3 回答 3

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

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

于 2012-07-15T10:05:47.263 回答
4

规则很简单:

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

由此您可以得出结论,如果要执行“原始”指针算术,则必须在 char* 之间进行转换。

于 2012-07-15T10:52:54.430 回答
3

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

于 2012-07-15T09:55:12.683 回答