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

时间:2018-05-17 10:09:37

标签: c++

我们假设我们有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方法,我想了解实例和每个引用调用方法之间的区别。 :)

感谢

2 个答案:

答案 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;