Если говорим об объявлении параметров функций и методов, то вот, какие варианты возможны:
void myFunc(SomeType arg); // 1
void myFunc(SomeType* arg); // 2
void myFunc(SomeType& arg); // 3
void myFunc(const SomeType* arg); // 4
void myFunc(const SomeType& arg); // 5
В первом случае параметр передаётся по значению. Это означает, что в месте вызова функции создаётся копия передаваемого значения и уже оно даётся в распоряжение функции. Функция может менять и крутить и менять его как хочет, без опасения «задеть» оригинальное значение. Этот способ хорошо подходит для простых типов вроде `int`, `char`, `float`, т.к. операция копирования для них дешёвая, а менять оригинальные значения обычно не требуется.
Во втором и третьем случае параметр передаётся по ссылке. Это означает, что в месте вызова функции программа получает адрес передаваемой переменной и функции предоставляет не копию `SomeType`, а адрес существующей переменной. Разница между * и & небольшая: в случае (2) вы должны явно показать, что отдаёте адрес, а в случае (3) компилятор это сделает за вас:
myFunc(&myVariable); // 2
myFunc(myVariable); // 3
Когда вы передаёте аргумент по ссылке, функция в полном праве изменить его значение, тем самым влияя на внешние данные. Именно из-за того, что разница между (1) и (3) не заметна синтаксически, многие программисты предпочитают не использовать (3) и предпочитают (2).
Передавать значение по ссылке имеет смысл тогда, когда аргумент «толстый» и делать копию при вызове накладно. Например, это может быть `struct` с множеством полей (матрица, например) или объект класса (Serial, например). Ещё один случай: если хочется из функции вернуть более одного результата. Например, она может возвращать `bool`, который говорит «получилось или не получилось», а результат, если получился класть в аргумент `char* out`.
Если проблема именно в том, что не хочется делать копию данных, а побочных эфектов функция производить не планирует, используют формы `const`: (4) и (5). Компилятор выдаст ошибку, если функция попытается изменить переданный аргумент в своём теле.