为什么这是一个值的调用,虽然我传递一个指针?

时间:2014-11-28 09:38:42

标签: c++ pointers

嗨,有人可以解释一下为什么以下是按值调用吗?

我想当我将客户端变量传递给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;
  };

}

2 个答案:

答案 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的指针的引用。