Примеры взяты из here.
Главный код:
#include <stdio.h>
int a;
int main() {
a = 3;
f(4, &a);
printf("%d\n", a);
return 0;
}
Вызов по значению:.
f(int x, int &y){
// x will be 3 as passed argument
x += a;
// now a is added to x so x will be 6
// but now nothing is done with x anymore
a += 2*y;
// a is still 3 so the result is 11
}
Значение передается в и не оказывает никакого влияния на значение переменной, переданной в
вызовов по каталогу:
f(int x, int &y){
// x will be 3 as passed argument
x += a;
// now a is added to x so x will be 6
// but because & is used x is the same as a
// meaning if you change x it will change a
a += 2*y;
// a is now 6 so the result is 14
}
Ссылка передана. Эффективно переменная в функции такая же, как и внешняя.
Вызов с Copy/Restore:
int a;
void unsafe(int x) {
x= 2; //a is still 1
a= 0; //a is now 0
}//function ends so the value of x is now stored in a -> value of a is now 2
int main() {
a= 1;
unsafe(a); //when this ends the value of a will be 2
printf("%d\n", a); //prints 2
}
Значение передается в и не оказывает никакого влияния на значение переменной переданное до конца функции, в какой момент Конечное значение переменная функции хранится в переданной переменной.
Основное различие между вызовом по ссылке и копированием/восстановлением заключается в том, что изменения, внесенные в функциональную переменную, не будут отображаться в переданной переменной до тех пор, пока не будет завершена работа по завершению работы функции, когда вызовы по ссылке будут видны сразу.
Хотя я был в состоянии принять ваш ответ, мне пришлось ждать еще несколько часов, чтобы получить награду. Спасибо за отличный ответ, и щедрость ваша, конечно! – mort
А, я не знал этого о системе награды. Хорошо знать! – mydogisbox