在c ++中传递参数的问题(指针让我困惑)

Sey*_*emi 1 c++ pointers

我编写了一个程序,它将一些数据存储在一个结构中,我将把结构传递给下面的其他程序

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

当我尝试从这个结构中检索数据时,我没有成功,我会得到错误的数据,垃圾: - ?

我的问题在这里是什么?

Chr*_*cke 5

在您对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)

我更喜欢第一个表单,因为它明确表示您正在传递指向要更改的结构的指针.第二种形式使得难以理解 - 正如你的文章中显而易见的那样 - 是否正在使用按值传递或通过引用语义传递.