我编写了一个程序,它将一些数据存储在一个结构中,我将把结构传递给下面的其他程序
slotUpdate(Datas);
Run Code Online (Sandbox Code Playgroud)
而我已经定义了这样的结构:
someNameSpace::stuData Datas;
Run Code Online (Sandbox Code Playgroud)
在将结构再次传递给slotUpdate之后,我将它传递给另一个过程,但这次作为参数和(void*)如下所示:
updateDB(void * parameter){
anotherNameSpace::someFucntion((stuData *) parameter);
}
Run Code Online (Sandbox Code Playgroud)
注意:我将数据传递给updateDb这样:updateDB(&Datas);
当我尝试从这个结构中检索数据时,我没有成功,我会得到错误的数据,垃圾: - ?
我的问题在这里是什么?
在您对slotUpdate的调用中,您传递的是"数据",而不是"&Data".您没有向我们提供slotUpdate的声明,但可以通过以下两种方式之一声明:
void slotUpdate(stuData& Data);
void slotUpdate(stuData Data);
Run Code Online (Sandbox Code Playgroud)
如果函数IS是第一种定义的,那我就不明白了.然而,第二种方式是值语义传递: - slotUpdate将写入Data结构的本地副本,传入的struct将不会更新,因此,将包含与slotUpdate返回时相同的垃圾.然后您将传递给其他功能.
将slotUpdate的定义更改为以下之一: -
void slotUpdate(stuData* pData);
void slotUpdate(stuData& Data);
Run Code Online (Sandbox Code Playgroud)
我更喜欢第一个表单,因为它明确表示您正在传递指向要更改的结构的指针.第二种形式使得难以理解 - 正如你的文章中显而易见的那样 - 是否正在使用按值传递或通过引用语义传递.
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |