На прошлом уроке digitCount делила своё n на 10, пока от него ничего не
оставалось, а число в main не менялось. Это не случайность. Этот урок о том,
как значения попадают в функцию — копией или оригиналом, — и о том, где
живёт каждая переменная и как долго.
Передача по значению: функция получает копию
Обычный параметр — это новая переменная, в которую записана копия аргумента. Что бы функция с ней ни делала, всё остаётся внутри функции:
Это называется передачей по значению, и чаще всего это ровно то, что нужно: функция может пользоваться параметром как черновиком, а переменные вызывающей стороны от неё защищены.
Передача по ссылке: &
Иногда изменить переменную вызывающей стороны — в этом и весь смысл. Поставьте
& после типа, и параметр станет ссылкой: не новой переменной, а другим
именем для самого аргумента.
Классический пример — обмен значений двух переменных. Вот обе версии рядом;
пройдите по шагам и следите за a и b: