C更改void指针表示的值

时间:2013-10-25 04:35:22

标签: c pointers void-pointers

这是对这个问题的跟进: Having a function change the value a pointer represents in C

作为练习,我试图创建一个通用函数来更改未确定类型数组中的值。我猜它应该是这样的。

void set_value(void * data, void * value, size_t size, int index){
    void * position = data + index*size;
    *position = *value;
}

当然不编译,* position = * value不使用值大小的信息(这里假设数据和值都指向size_t大小的smthg)。

我想对我的计划说: “取值由值指向的大小的内存块并将其复制到位置指向的地址”

1 个答案:

答案 0 :(得分:6)

使用memcpy()

void set_value(void * data, void * value, size_t size, int index){
    void * position = (char*)data + index*size;
    memcpy(position, value, size);
}

另请注意,对void指针的算法不是有效的C,尽管它可能被允许作为编译器扩展。你应该首先加注char*