如何将指针变量移动指定的字节数?

时间:2016-09-23 02:40:16

标签: c pointers casting

在我的代码中,我被要求返回指向heap_ptr的旧值的指针,并将heap_ptr移动bytes_alloc的数量。我已经将heap_ptr声明为void *heap_ptrheap_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);
}

2 个答案:

答案 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);
}