我只是想了解这个功能。我说的返回类型是指向对象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对象的地址。如果fruitInCharacter
是std::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/