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).
我想对我的程序说的是:"获取按值指向的大小的内存块并将其复制到位置指向的地址"
使用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*.