在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);
}