指针数组交换无需直接访问数组



试图使用命令将我的角色移动到矩阵中。但是我无法完全正确。

这是上传到wandbox的代码以节省问题的空间:wandbox

期望:我希望当我按W键时,地图上的点'*'会向上移动。通过交换两个指针。

结果:交换什么都不做,即使指针也会改变。

void Player::update(Node * neighbors[8], const char c,Node * self)
{
    switch (c)
    {
    case 'w':
        move(neighbors[1],self);
        break;
    default:
        break;
    }
}
//This is right issent it?
void Player::move(Node * newspot, Node * oldspot)
{
    Node* temp = newspot;
    newspot = this;
    oldspot = this->standingTile;
    this->standingTile = temp;
}

我不明白。我确实尝试了一些不同的事情,例如指向数组指针的指针,所以希望我的示例看起来不会疯狂。

尝试一下:

void Player::update(Node * neighbors[8], const char c,Node * self)
{
    switch (c)
    {
    case 'w':
        move(&neighbors[1],&self);
        break;
    default:
        break;
    }
}
void Player::move(Node ** newspot, Node ** oldspot)
{
    Node* temp = *newspot;
    *newspot = this;
    *oldspot = this->standingTile;
    this->standingTile = temp;
}

认为我已经弄清楚了,事实证明我要做的是"多间接间接"。

@peter指出,只要以这种方式将指针交换并不是微不足道的。

virtual Node* update(Node** neighbors[8], char& c);

是我所需要的,我将一系列指针传递给存储数组中的指针,以便我可以将它们交换为顶级。

int* myArrayOfInts[MAP_SIZE*MAP_SIZE];

我可以保留所有对象的准确列表。

然后,当我需要将其操作为2D数组时:

int*(*map)[MAP_SIZE] = (int*(*)[MAP_SIZE])myArrayOfInts; //Cast as 2d Array temporarily.

现在我可以将地图视为普通的2D指针。

现在,通过将指针传递给指针数组的指针作为:

,调整父数组的数组变得很琐
&map[x][y]

或在我的情况下,将它们存储在一系列数组指针中....

Node** neighbors[8];
neighbors[0] = &map[x][y];

然后,我可以将其传递到一个函数,允许我在不复制和移动整个对象的情况下交换值。

yo狗,我放弃了你的leik puinters,所以我们将指针放在指针指针中的指针....

最新更新