假设我们有 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 的值,因为它使用引用更改了它。
现在,让我们来看一些示例类“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 方法,我想了解按实例调用方法和按引用调用方法之间的区别。 :)
谢谢
最佳答案
实际上,通过引用传递与通过指针传递不同,引用是变量的第二个名称
int a = 2;
int & b = a;
在这种情况下,b不是指针,它是变量a的第二个名称,即具有单个内存地址的同一变量,可以通过两个名称访问,所以你不能这样做
int * c = b; //this is wrong
希望这有帮助
关于c++ - 对象和基元通过引用传递之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50388812/