通过引用传递对象和基元之间的区别

Difference between passing by reference with Objects and primitives

本文关键字:之间 区别 对象 引用      更新时间:2023-10-16

假设我们有 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-method中也是如此,因为它使用引用更改了它。

现在,让我们举一些示例类"猫">

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: %sn", pCat->name);
}

当然,我需要做*pCat = &cat但究竟为什么呢? 我们实际上不是传递变量的地址,而只是传递对象本身而不是变量的副本吗?

附言不介意meowName方法,我想了解按实例和按引用调用方法之间的区别。 :)

谢谢

实际上通过引用传递不同于通过指针传递,引用是变量的第二个名称

int a = 2;
int & b = a;

在这种情况下,b 不是指针,它是变量 A 的第二个名称,即具有单个内存地址的同一变量,可以通过两个名称访问,因此您无法执行此操作

int * c = b; //this is wrong

我希望这有帮助

Cat &cat = value;

cat 不保存地址,它是对值的引用。 因此,您必须使用运算符 (&( 的地址将其分配给指针。

Cat *ptr = &cat;