C ++, как и C, является языком вызова по значению, поэтому, как правило, копии параметров всегда создаются.
Когда:
void f( int x ) {
}
вызывается, копия его параметра создается и передается функции. Когда:
* +1007 *
вызывается, копия указателя создается и передается функции.
Исключением является использование ссылок:
void f( int & x ) {
}
Копирование не производится, но внутренне (вероятно) используется указатель для передачи адреса параметра - однако вы не должны думать об этом.
Точно так же относится и к возвращаемым значениям:
int f() {
return 1;
}
копия значения 1 создается и возвращается вызывающей стороне. Если функция вернула указатель, будет сделана копия указателя. Еще раз, ссылки являются исключением, поскольку копия не создается, но внутренне указатель (вероятно) используется для возврата значения.