Какая разница в использовании passByRefrence против passByAddress в этом примере. C++
Как видно из примера, который я приведу ниже, я использую как Pass By Reference, так и Pass By Address...
#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. Хотя я понимаю разницу между ними и передачей по значению (так как передача по значению передает копию переменной, а не адрес памяти), я не понимаю в чем разница этих обоих. Многие люди просто говорят "Использовать проход по ссылке намного лучше" или "Использовать проход по ссылке все время, кроме случаев, когда вам нужно использовать адрес по адресу".. Но я хочу знать реальную разницу, чтобы я мог решить, какой из них использовать в моих более поздних проектах.
Спасибо.
1 ответ
Внутренне оба обычно делают одно и то же: указатель прохода. Но когда вы передаете ссылку, вы не можете напрямую делать такие вещи, как *(p + 1)
Здесь можно найти гораздо больше объяснений https://www.quora.com/What-is-the-difference-between-pass-by-reference-and-pass-by-pointers-to-a-function