在我的代码中,我被要求返回指向heap_ptr的旧值的指针,并将heap_ptr移动bytes_alloc的数量。我已经将heap_ptr声明为void *heap_ptr
和heap_ptr = mmap(NULL, 2*4096, ...)
来为heap_ptr指定8192个字节。我的问题是我不确定我是否正确地将heap_ptr移动2000字节,因为bytes_alloc的类型为int。我应该像heap_ptr = (void *)((char *)heap_ptr + (char)bytes_alloc)
一样转换bytes_alloc吗?
这是我的功能:
void heap_alloc(int bytes_alloc) //bytes_alloc is 2000
{
void *temp_heap_ptr; //teporary pointer to my mmap heap_ptr
heap_ptr = (void *)((char *)heap_ptr + bytes_alloc) //this is where my question is
return (temp_heap_ptr);
}
答案 0 :(得分:2)
指针算术按指向的对象大小移动。所以在表达式中:
(char *)heap_ptr + bytes_alloc
指针由许多char
s调整,这与说这个字节数相同,因为char
被定义为1个字节。
bytes_alloc
本身的类型不会影响计算。
注意,您不需要强制转换为void *
,而是隐式转换。最好避免不必要的强制转换,以使代码更易于阅读。
答案 1 :(得分:-1)
如果要在bytes_alloc
前面返回指针heap_ptr
,
void *heap_alloc(int bytes_alloc, void *heap_ptr) {
return (void *)((char *)heap_ptr + bytes_alloc);
}