2012-04-10 93 views
2

我看到一个函数的定义,看起来像这样C++的引用,地址指针

ClassName::Read(myObjectClass &temp) 

我想这样称呼它:

myObjectClass *myObj; 
ClassName::Read(&myObj); 

但是这是不正确。叫它的正确方法是什么?它需要类型myObjectClass&

+0

请注意,如果对象'myObj'未在调用函数(例如new myObjectClass)中创建,则该Read将写入某个未定义的地址。 – guga 2012-04-10 00:56:26

回答

5

正如詹姆斯正确地指出,正确的语法是*myObj。关键是&myObj给你的地址myObj,它有一个myObjectClass**类型。您需要改为取消引用myObj以获得它指向的myObjectClass的实例,因此您使用*

顺便提一句,目前使用*myObj会导致未定义的行为,因为myObj本身尚未初始化。如果您不需要动态分配myObjectClass,你可能会更好只是这样做:

myObjectClass myObj; 
ClassName::Read(myObj); 

如果动态分配是必须的,那么你可以做如

myObjectClass *myObj = new myObjectClass; 
ClassName::Read(*myObj); 
//... 
delete myObj; 
9

像这样:

ClassName::Read(*myObj); 
0

这样

myObjectClass myObj; 
ClassName::Read(myObj); 

您不必使用指针和动态分配无处不在。 C++不是Java。