我们假设我们有2个数字,我们希望使用引用调用的方法将它们交换。它看起来像这样:
int main(){
int a = 10;
int b = 20;
swap(a, b);
}
void swap(int &a, int &b) {
int tmp = a;
a = b;
b = tmp;
}
它会交换a和b的值,即使在main方法中也是如此,因为它使用引用更改了它。
现在,我们来看一些示例课" Cat"
class Cat{
public:
char _name[20];
Cat(char name[]);
~Cat();
static void meowName(Cat &cat);
};
所以我想,当我们通过参考(地址)时,我可以这样做:
void Cat::meowName(Cat &cat){
Cat *pCat = cat; // as variable Cat should be an address already
printf("My name is: %s\n", pCat->name);
}
当然,我需要做*pCat = &cat
,但为什么呢?
我们实际上是否传递了变量的地址,而只是传递了对象本身而不是变量的副本?
P.S。不介意meowName方法,我想了解实例和每个引用调用方法之间的区别。 :)
感谢
答案 0 :(得分:2)
实际上,通过引用传递与传递指针不同,引用是变量的第二个名称
int a = 2;
int & b = a;
在这种情况下,b不是指针,它是变量a的第二个名称,即具有单个内存地址的相同变量,可以通过两个名称访问,因此您无法执行此操作
int * c = b; //this is wrong
我希望这会有所帮助
答案 1 :(得分:1)
Cat &cat = value;
cat不保存地址,它是对值的引用。因此,您必须使用运算符(&)的地址将其分配给指针。
Cat *ptr = &cat;