我可以在函数中传递指向自己的指针吗?

Can I pass a pointer to myself in a function?

本文关键字:自己的 指针 函数 我可以      更新时间:2023-10-16

我有一个对象(Cell类型),它存储指向相同类型的其他对象的指针列表(网格上的邻居)。

这是一个2D网格..作为视觉对象,见下文:

xxc
xcc
ccx

正中心的"c"将是一个活细胞,它必须在它的东北、东、南和西南。它的邻居列表将具有指向这些单元格的指针,然后是指向其他方向的 Null 指针。它看起来像这样:邻居 = {空, 指针, 指针, 空, 指针, 空, 指针, 空)(列表的顺序是北、东、南、西、东北、东南、西南、西北)。

如果一个新像元移动到其相邻位置,例如移动到该像元的西部,它现在将如下所示:

xxc
ccc
ccx
我需要更新邻居

列表,以便它现在有一个指向其西部单元格的指针,然后西部单元格需要更新其所有邻居以说"你好!我在这里!你现在有我作为邻居"。因此,西方单元格会浏览自己的指针列表,并在每个指针上说"更新您的列表,将我作为您的邻居"。我正在尝试将"我"指针作为指向自身的指针传递。 这是代码..

int Cell::updateAllNeighbours(){
    //Need a pointer to myself...
    Cell * temp = &this; //how do I do this???
    for (int i=0; i<NUM_NEIGHBOURS; i++){
        if (neighbours[i] != NULL) {
            if (i==0)
                neighbours[i]->updatedNeighbour(2, temp);
            else if(i==1)
                neighbours[i]->updatedNeighbour(3, temp);
            else if(i==2)
                neighbours[i]->updatedNeighbour(0, temp);
            else if(i==3)
                neighbours[i]->updatedNeighbour(1, temp);
            else if(i==4)
                neighbours[i]->updatedNeighbour(6, temp);
            else if(i==5)
                neighbours[i]->updatedNeighbour(7, temp);
            else if(i==6)
                neighbours[i]->updatedNeighbour(4, temp);
            else if(i==7)
                neighbours[i]->updatedNeighbour(5, temp);
        }
    }
}

所以我试图调用 updateNeighbor 函数并说"在位置 x [数字],你需要把这个指向我的指针放在你的邻居列表中"。不过,我不确定如何将指针传递给自己。

有什么想法吗?对不起,这太令人困惑了...

this是一个指针,而不是一个引用。 所以这个(没有双关语)代码:

Cell * temp = &this;

应该是:

Cell * temp = this;

除此之外,您根本不需要temp,似乎:

if (neighbours[i] != NULL) {
  if (i==0)
    neighbours[i]->updatedNeighbour(2, this);
  else if(i==1)
    neighbours[i]->updatedNeighbour(3, this);
  // etc...