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

时间:2018-04-25 02:26:00

标签: c++ pointers swap

尝试使用命令让我的角色在矩阵中移动。但我不能让这个动作完全正确。

以下是上传到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;
}

我不明白。我尝试了一些不同的东西,比如指向数组指针的指针,所以希望我的例子看起来并不疯狂。

2 个答案:

答案 0 :(得分:0)

请改为尝试:

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;
}

答案 1 :(得分:0)

想想我弄清楚了,原来我想做的事情被称为“多重间接”。

正如@Peter所指出的那样以这种方式交换指针是非常重要的。

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

是我需要的,我将指针数组传递给存储数组中的指针,以便我可以在顶层交换它们。

int* myArrayOfInts[MAP_SIZE*MAP_SIZE];

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

然后当我需要将其作为二维数组进行操作时:

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];

然后我可以将它传递给一个函数,允许我交换值而不复制和移动整个对象。

哟狗,我把你的指针指向你,所以我们把指针指针放在指针指针数组中......