试图理解函数中指针的使用

时间:2014-04-09 09:33:54

标签: c++ pointers vector

我只是想了解这个功能。我是否正确地说返回类型是指向对象Fruit的指针,它应该是内存中的地址?另外我在fruitInCharacter中返回Fruit的解引用对象,它也是一个内存地址?

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

同样在第二个函数中,我使用.push返回向量中的指针(内存中的地址)?

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

}

3 个答案:

答案 0 :(得分:2)

是。返回类型是指向Fruit对象的指针,&#34;应该是&#34;记忆中的一个地址。

否。您没有返回&{34; FruitfruitInCharacter的解除引用对象,它也是一个内存地址&#34;。您将返回FruitfruitInCharacter对象的地址。您正在使用&运算符,因此您正在使用该对象的地址

不。在第二个函数中,您不是&#34;将指针(内存中的地址)传入向量&#34;。你正在传递一个物体。由于inFruit的类型为Fruit *(因此,它是一个地址),因此解除引用的表达式*inFruit的类型为Fruit(因此,它是一个对象)。

答案 1 :(得分:0)

要明确知道您要做什么,如果它是正确的,我们需要查看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返回向量中的指针(内存中的地址)?

即可。您正在将指针传递给方法,但是您正在取消引用指针,导致inFruit指向的对象的副本存储在向量中。如果向量存储类型为Fruit的元素,那么这是正确的,但不会按照您的想法执行。如果它存储类型Fruit*的元素,那么它甚至不应该编译。

答案 2 :(得分:0)

&安培; fruitInCharacter.at(位置);它没有被解除引用。 fruitInCharacter.at(location)会给你一个Fruit&amp; amp;类型对象。 但是你的返回类型是一个指针,所以你用&amp;获得它的ptr。操作

fruitInCharacter.push_back( inFruit):在这里你取消引用Fruit 类型变量,所以它将传递一个Fruit(const Fruit&amp;实际上),你的容器将从中发出一个COPY。