CPP-101: Функции

Предаване на аргументи

В C параметрите на функцията се предават по стойност. С други думи – при извикване на дадена функция, параметрите, които се предават се копират и в тялото на функцията се използват копията. Нека разгледаме следния пример:

void plus2(int x) {
    x+=2;
}
int main() {
    int counter=0;
    plus2(counter);
    ...
}

Тъй като параметрите на функциите се предават по стойност, операцията в ред 2 се извършва върху копие на предадената стойност. Това означава, че извикването на функцията plus2 в ред 6 няма да доведе до промяна на стойността на променливата counter.

Ако е необходимо функцията да променя стойността на аргументите си, то може да се използват указатели, т.е. като параметри на функцията се предават не самите променливи, а указатели към тях. Да разгледаме следния фрагмент:

void plus2(int* px) {
    *px+=2;
}
int main() {
    int counter=0;
    plus2(&counter);
    ...
}

Съгласно дефиницията на функцията plus2 в ред 1 като параметър се предава указател към int. В тялото на функцията, в ред 2, операцията се извършва върху обекта, към който сочи предаденият указател. Това означава, че когато в ред 6 се извика функцията plus2 и като параметър се предаде указател към променливата counter, при изпълнение на функцията ще се промени стойността на променливата към която сочи указателят, т.е. променливата counter.

В езика C този подход е единственият, който позволява една функция да променя параметрите си. В C++ има една допълнителна възможност – аргументите на функцията да се предават не по стойност, а като препратки. Да разгледаме следния фрагмент:

void plus3(int& x) {
    x+=2;
}
int main() {
    int counter=0;
    plus3(counter);
    ...
}

При дефиницията на функцията plus3 в ред 1 е указано, че параметърът x на функцията се предава като препратка. Това означава, че когато в ред 6 функцията се извиква с действителен аргумент променливата counter, в тялото на функцията се предава препратка към променливата counter. Операциите в тялото на функцията се извършват върху препратката към действителния аргумент, което означава, че при промяна на формалния аргумент в ред 2, се променя предадения действителен аргумент на функцията – променливата counter.

Публикувано в CPP-101, ООП с етикети , , . Постоянна връзка.

Един коментар по CPP-101: Функции

  1. Pingback: CPP-101: Кратък обзор на езика за програмиране C++ | Записки по програмиране

Коментарите са затворени.