我只是想了解这个功能。我说的返回类型是指向对象Fruit的指针,那应该是内存中的地址吗?我还要在fruitInCharacter中返回Fruit的取消引用对象,这也是一个内存地址吗?

Fruit* Player::fruit(int location)
{
    if (location<(int)fruitInCharacter.size()) {
        return &fruitInCharacter.at(location);
    }
    return NULL;
}


同样在第二个函数中,我使用.push back将指针(内存中的地址)传递到向量中?

void Player::attachFruit(Fruit *inFruit)
{
  fruitInCharacter.push_back(*inFruit);

}

最佳答案

要具体了解您要执行的操作以及它是否正确,我们需要查看vector fruitInCharacter的声明。由于您没有提及任何编译器错误,因此我推断它是std::vector<Fruit>

Fruit* Player::fruit(int location)
{
    if (location<(int)fruitInCharacter.size()) {
        return &fruitInCharacter.at(location);
    }
    return NULL;
}



  我说的返回类型是指向对象Fruit的指针,那应该是内存中的地址吗?


是。


  我还要在fruitInCharacter中返回Fruit的取消引用对象,这也是一个内存地址吗?


否。您要在fruitInCharacter中返回Fruit对象的地址。如果fruitInCharacterstd::vector<Fruit>类型,则这是正确的。如果它是std::vector<Fruit*>类型,则不是,并且不应编译。

void Player::attachFruit(Fruit *inFruit)
{
  fruitInCharacter.push_back(*inFruit);

}



  同样在第二个函数中,我使用.push back将指针(内存中的地址)传递到向量中?


否。您正在将指针传递给方法,但是您取消了对该指针的引用,从而导致inFruit指向的对象的副本存储在向量中。如果向量存储的是Fruit类型的元素,那是正确的,但没有按照您认为的那样做。如果它存储类型为Fruit*的元素,则甚至不应该编译。

关于c++ - 试图了解函数中指针的使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22958387/

10-13 07:09