这是对这个问题的跟进: 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)。
我想对我的计划说: “取值由值指向的大小的内存块并将其复制到位置指向的地址”
答案 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*
。