在C中使用空指针修改原始文件

在C中使用空指针修改原始文件,c,pointers,pass-by-reference,void,void-pointers,C,Pointers,Pass By Reference,Void,Void Pointers,我试图通过引用将变量传递到void指针,以更新原始值。当我尝试它时,旧值永远不会更新。任何帮助都将不胜感激。 gst\u filter\u chain与主要功能类似(Gstreamer) 我没有阅读全部代码,但此函数不执行任何操作: void update_value(void *oldValue, void *newValue) { oldValue = newValue; } oldValue和newValue都是保存内存地址的局部变量。由于删除了局部变量,函数退出时赋值效果丢失

我试图通过引用将变量传递到
void
指针,以更新原始值。当我尝试它时,旧值永远不会更新。任何帮助都将不胜感激。
gst\u filter\u chain
与主要功能类似(
Gstreamer


我没有阅读全部代码,但此函数不执行任何操作:

void update_value(void *oldValue, void *newValue)
{
    oldValue = newValue;
}
oldValue
newValue
都是保存内存地址的局部变量。由于删除了局部变量,函数退出时赋值效果丢失

更新

您可能希望用
newStrcut
的字段更新
oldStruct
的字段
a
。然后您的函数
update\u struct
可以如下所示

void update_struct(myStruct *oldStruct, myStruct newStruct)
{
    oldStruct->a = newStruct.a;
}
由于
oldStruct
是指向结构的指针,存在于某个地方,赋值将影响它

很遗憾,我不知道
成员的类型

更新2

还可以通过指针发送第二个结构来节省处理时间:

void update_struct(myStruct *oldStruct, myStruct *newStruct)
{
    oldStruct->a = newStruct->a;
}
在这个代码段中,您只更新指针变量,而不是它所指向的值。 您必须取消引用指针才能访问实际数据。如果您想要一个真正通用的setter解决方案,您可以使用memcpy,但是您需要向update_value传递一个size参数,告诉memcpy oldValue和newValue所指向的数据类型的大小

void update_value(void *oldValue, void *newValue, size_t dataSize)
{
    memcpy(oldValue, newValue, dataSize);
}

在C语言中,您不需要在
void*
之间强制转换任何内容,它是由编译器隐式添加的。您不能用
filter->data.a=temp\u data.a
交换
update\u struct
调用吗?
void update_value(void *oldValue, void *newValue)
{
    oldValue = newValue;
}
void update_value(void *oldValue, void *newValue, size_t dataSize)
{
    memcpy(oldValue, newValue, dataSize);
}