В языке C++ обычно при вызове функции мы передаем в нее некоторые аргументы. Эти аргументы называются параметрами функции. Рассмотрим простейший пример.
1 2 3 4 5 6 |
int ask(int a) { a = a + a; return a; } b = ask(a); |
Мы вызвали функцию ask, передав в нее параметр a, и результат записали в b. В данном случае фактический параметр, глобальная переменная a никак не изменится, внутри функции операции будут происходить с формальным параметром, локальной переменной a, которая существует только внутри этой функции. Иногда требуется наоборот, изменить с помощью функции один из вводимых параметров. Тогда в качестве аргументов используются ссылки и указатели.
1 2 3 4 5 6 7 8 9 10 |
void fc1(int v1, int& v2) { v1++; v2++; } void main() { int x = 1, y = 1; fc1(x,y); } |
В данном примере значение y изменится и станет равно двум, потому что в функции передали не значение, которое примет локальная переменная, а сам объект, с которым и происходили все изменения. А x останется единицей, так как переданный параметр функции стал значением, которое изменилось внутри функции и более нигде не использовалось.
Указатели в основном используются для передачи массивов в функции. В C++ в функцию никогда не передается массив напрямую, а только указатель на 1 символ этого массива. Даже если принудительно объявить одним из параметров функции массив, как показано ниже, C++ автоматически преобразует его в указатель на 1 элемент массива.
1 2 3 |
void find(int n[10]); void find(int n[]); void find(int *num); |
Так что все три варианта эквивалентны, и сводятся в языке C++ к последнему. В C++ возможно установить значение параметров функции по умолчанию. Тогда если параметры не введены, функция использует заранее заданные значения.
1 2 3 4 5 6 7 8 9 |
int spqr(int x, int y = 2) { return y; } int main() { spqr(1); // вернет 2 spqr(1,3); // вернет 3 } |