Указатели и аргументы функций

Так как в С++ передача аргументов функциям осуществляется "по значению", вызванная процедура не имеет непосредственной возможности изменить переменную из вызывающей программы. Что же делать, если вам действительно надо изменить аргумент? Например, программа сортировки захотела бы поменять два нарушающих порядок элемента с помощью функции с именем swap. Для этого недостаточно написать

swap(a, b);

определив функцию swap при этом следующим образом:

void swap(int x,int y) { int t; t= x; x = y; y = t; }

Из-за вызова по значению swap не может воздействовать на аргументы а и b в вызывающей функции.

К счастью, все же имеется возможность получить желаемый эффект. Вызывающая программа передает указатели подлежащих изменению значений:

swap(&a, &b);

Так как операция & выдает адрес переменной, то &a является указателем на a. В самой swap аргументы описываются как указатели и доступ к фактическим операндам осуществляется через них.

void swap(int *px,int *py) { int t; t = *px; *px = *py; *py = t; }

Указатели в качестве аргументов обычно используются в функциях, которые должны возвращать более одного значения. (можно сказать, что swap возвращает два значения, новые значения ее аргументов).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: