在这个例子中使用passByReference与passByAddress有什么区别.C++

Whats the difference in using passByRefrence vs passByAddress in this example. C++

本文关键字:passByAddress 什么 C++ 区别 passByReference      更新时间:2023-10-16

正如您在下面将要提供的示例中所看到的,我同时使用通过引用和传递地址...

#include<iostream>
#include<string>
void passByAddress(int *a);
void passByReference(int &a);
int main() {
    int betty = 21;
    int setty = 45;
    passByAddress(&betty);
    passByReference(setty);
    std::cout << "Betty : " << betty << std::endl;
    std::cout << "Setty : " << setty << std::endl;
}
//Pass By Adress
void passByAdrress(int *a) {
    *a = *a + 5;
    //Memory Adress of a.
    //So gives hexa decimal.
    std::cout << "Address : " << a << std::endl;
    //Actual Value of adress
    std::cout << "Address's Value : " << *a << std::endl;
}
//Pass By Reference
void passByReference(int &a) {
    a = a + 5;
    //Memory Address of a.
    //So gives hexa decimal.
    std::cout << "Adrress : " << &a << std::endl;
    //Actual Value of address
    std::cout << "Address's Value " << a << std::endl;
}

所以在这里我真的不明白使用passbyaddress和passbyreference的区别。虽然我确实了解这两者和按值传递之间的区别(因为按值传递传递变量的副本而不是内存地址),但我不明白这两者有什么区别。许多人只是说"使用按引用传递更好",或者"一直使用按引用传递,除非你必须使用按地址传递"。但我想知道真正的区别,这样我就可以决定在以后的项目中使用哪一个。

谢谢。

在内部,两者通常都做同样的事情:传递指针。但是当你传递引用时,你不能直接做一些事情,比如*(p + 1)

这里还有更多的解释 https://www.quora.com/What-is-the-difference-between-pass-by-reference-and-pass-by-pointers-to-a-function