【问题标题】:C change the value a void pointer representsC 改变一个 void 指针所代表的值
【发布时间】:2013-10-25 04:35:22
【问题描述】:

这是对这个问题的跟进: 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 不使用 value 的大小信息(这里假设 data 和 value 都指向 size_t 大小的 smthg)。

我想对我的程序说的是: “取值指向的内存块,复制到位置指向的地址”

【问题讨论】:

    标签: c pointers void-pointers


    【解决方案1】:

    使用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*

    【讨论】:

    • 哦,我正在与关于指针的教程和在论坛中搜索以及答案是什么基本的东西作斗争。谢谢。
    • 另外,不要忘记,对 void 指针的指针运算并不是严格有效的 C。
    • 实际上,我对此一无所知。将指针位置移到正确位置的有效方法是什么?
    • 你没看到我在回答中是怎么做到的吗?
    • 我做到了,但我不明白转换为 char* 的作用(因为 position 是 void*)。我应该问一个新问题还是有适合这些 cmets 的简单答案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2014-05-13
    相关资源
    最近更新 更多