在C ++中为指针参数分配地址

问题描述

我有一个结构,说:

 struct Astruct {
   int a;
   int b;
 }

我有一个该结构的av实例:

private:
  Astruct My_List;

然后我有一个函数想要获取My_List的地址。

public:
  void Get_My_List(Astruct* List) {

    List = &My_List;

  }

但是似乎总是将参数Astruct * List设置为0; 我知道我可能可以创建一个称为Astruct&Get_Address()的函数,但在这种情况下,我想知道为什么我不能在参数中分配地址。我的意思是可以将参数作为引用传递并更改数据。也许当我写这篇文章时,我现在就开始理解问题了……无论如何,可以确定是否可以通过参数更改指针指向的地址?还是可以只更改指针指向的数据?

解决方法

我知道了。是的,这是关于混乱,而不是指针混乱,更像是参数混乱! 所以问题是我认为我可以通过参数“返回”值。我以为是因为我之前创建了使用指针的函数,然后该函数更改了地址指向的数据。是的,它被“设置”为零。我的意思是@john是正确的,代码无法设置它,但是它永远不会改变。因为我传入的值被初始化为零,并且我不能更改参数,所以在本例中为Astruct * List。因此,我传递的指针保持不变。 因此,我要做的就是使函数采用指向指针的指针。

void Get_My_List(Astruct** List) {
  *List = &My_List;
}

然后将地址传递给指针。在那种情况下,我可以更改指针指向的数据,即指针。

谢谢,再见!

,

您可以传递引用指针:

void Get_My_List(Astruct*& List) {
    List = &My_List;
}

并这样称呼它:

AstructHolder obj{};
Astruct* my_ptr{nullptr};
obj.Get_My_List(my_ptr);