2012-07-15 52 views

回答

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 

您可以使用整数太大,但你一定要注意你在一次设置的字节数量。

+0

是否有可能通过投射void指针而不是创建“中间”类型指针来实现此目的? – dtech 2012-07-15 10:07:26

+0

当然,为清晰起见,我使用中间表示法 – ziu 2012-07-15 10:08:34

3

因此,通过“工作”我假设你的意思是“我怎么提领/上void*执行指针运算”?你不能;如果你只关心阅读大量的内存,你必须将它施放到char*。当然,如果是这种情况,只需将其声明为char*即可。

+0

我对读/写任何类型的东西感兴趣,不仅仅是字符。 – dtech 2012-07-15 10:01:19

+0

@ddriver:没有改变。你必须投射指针。当类型未知时,你会如何期待解引用和/或算术的行为?这个不成立。您需要传递额外信息以了解底层类型。 – 2012-07-15 18:12:20

4

规则很简单:

  • 每个指针类型(除函数指针)可被转换为并从无效*,无损耗。
  • 您无法对void *指针执行指针运算,也无法对它们进行解引用
  • sizeof(char)等于1,按照定义;所以增加一个字符指针意味着将“原始”指针值“加1”

由此可以得出结论,如果要执行“原始”