嗨,有人可以解释一下为什么以下是按值调用吗?
我想当我将客户端变量传递给GetClient时,它将是一个引用调用。 但是对代码进行了修改,向我显示只设置了GetClient的参数,在离开方法后,在main中声明的 client 仍为空。
如何定义GetClient(),它是否正确设置了我的客户端变量? 主
int main()
{
Example::A a;
Example::B b;
Example::B* client = 0;
a.SetClient(1,&b);
a.GetClient(1,client);
if(client != 0)
{
std::cout<<"OK"<<std::endl;
}
}
A级
namespace Example
{
class A
{
public:
void A::SetClient(int key, B* client)
{
clients[key] = client;
}
void A::GetClient(int key, B* client)
{
client = clients[key];
}
private:
B* clients[10];
};
}
B级
class B
namespace Example
{
class B
{
private:
int secret;
};
}
答案 0 :(得分:3)
指针是对B
对象的引用,而不是对变量client
的引用。如果您想要引用client
变量,您可以:
(1)在函数上使用&
运算符:
void A::GetClient(int key, B* & client)
{
client = clients[key];
}
(2)或者,传递指向变量的指针:
void A::GetClient(int key, B** client)
{
*client = clients[key];
}
并传递变量的指针:
a.GetClient(1, &client);
答案 1 :(得分:0)
您可以按副本传递指针,因此在函数中修改它们不会修改原始传递的参数。如果要通过引用传递它们以便能够修改原件,请使用以下语法:
void A::GetClient(int key, B*&client) {
client = clients[key];
}
client
是对指向B
的指针的引用。