我只是想了解这个功能。我是否正确地说返回类型是指向对象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);
}
答案 0 :(得分:2)
是。返回类型是指向Fruit
对象的指针,&#34;应该是&#34;记忆中的一个地址。
否。您没有返回&{34; Fruit
中fruitInCharacter
的解除引用对象,它也是一个内存地址&#34;。您将返回Fruit
内fruitInCharacter
对象的地址。您正在使用&
运算符,因此您正在使用该对象的地址。
不。在第二个函数中,您不是&#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。