Функции в C++ объявляются так:
<Тип возвращаемого объекта> <Название функции>(<Тип аргумента1> <Имя аргумента1>, <Тип аргумента2> <Имя аргумента2> ...){ <Блок инструкции> return <Значение>; // Тип значения должен совпадать с "типом возвращаемого значения" }Если функция не должна возвращать никакого значения. То типом возвращаемого объекта следует указывать void. Пример:
void printValue(int a){ cout << a << endl; //return void; или return; можно не писать. } // данная функция выводит на экран значение, передаваемого в качестве аргументаВот пример простой фунцкии, которая складывает два числа:
int sum(int a, int b){ return a + b; }Внутри функции можно создавать переменные, они локальные и поэтому после завершения работы функции будут удаляться. Важно понимать, что аргументы фунции - это такие же локальные переменные, и что при передаче по значению невозможно изменить прототип аргумента.
#include <iostream> using namespace std; void swap(int a, int b){ int c = b; b = a; a = c; } int main(){ int a = 1; int b = 10; swap(a, b); cout << a << ' ' << b << endl; // выведет 1 и 10, а не 10 и 1, как ожидалось... return 0; }Возникшая проблема объясняется тем, что внутри функции swap() создаютя новые переменные a и b, чьи значения удаляются после завершения работы функции. Для решения данной проблемы существует механизм работы с указателями. Указатель - это номер ячейки памяти, в которой лежит значение данной переменной.
int a = 9; int *b = &a; // теперь b - номер ячеки, где зранится a (9)Теперь напишем правильную реализацию функции swap():
void myswap(int *x, int *y){ int z = *x; *x = *y; *y = z; } // при вызове функции писать нужно так: swap(&a, &b), где a и b - переменные типа int.То же самое, но более удобным способом можно писать так: (этот метод называется передачей по значению)
void myswap(int &x, int &y){ int z = x; x = y; y = z; } // при вызове надо писать myswap(a, b), где a, b - переменные типа int.Из последнего примера нужно понимать только то, что мы не создаем новые переменные, а берем те, что нам передают в качестве аргумента...