C更改void指针表示的值

Vin*_*nce 0 c pointers void-pointers

这是对这个问题的跟进: 有一个函数改变指针在C中表示的值

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

void set_value(void * data, void * value, size_t size, int index){
    void * position = data + index*size;
    *position = *value;
}
Run Code Online (Sandbox Code Playgroud)

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

我想对我的程序说的是:"获取按值指向的大小的内存块并将其复制到位置指向的地址"

Bar*_*mar 6

使用memcpy().

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

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