Возвращение указателей функции в С++
Функция в качестве значения может возвращать указатель. Для этого нужно предусмотреть соответствующие инструкции в программном коде функции. В прототипе функции, возвращающей в качестве значения указатель, перед именем функции указывают оператор *. Пример
функции, возвращающей указатель, приведен в следующем листинге.
В программе объявляется функция mpoint(), возвращающая в качестве результата указатель на максимальный из двух ее аргументов. Сразу отметим, что оба аргумента передаются по ссылке - если бы они передавались по значению, не было бы смысла возвращать указатель на один из аргументов, поскольку в этом случае указатель ссылался бы на временную переменную- копию аргумента. При возвращении в качестве значения указателя не следует забывать, что воз вращается адрес большего из аргументов, а не сам аргумент. Адрес переменной
(аргумента) получаем, указав перед именем соответствующей переменной оператор &, что и было сделано в командах return &n; и return &n;.
В главном методе программы объявляются две целочисленные переменные n и m со значениями 3 и 5 соответственно. Именно они передаются аргументами функции mpoint(). Результат записывается в переменную-указатель р. В результате переменная р в качестве значения получает адрес переменной m. Поэтому после выполнения команды (*р)++ значение переменной m увеличивается на единицу.
#includeusing namespace std; int *mpoint(int &n,int &m){ if( n > m ) return &n; else return &m; } int main(){ int n=3,m=5; int *p; p=mpoint(n,m); (*p)++; cout << "n =" << n << endl; cout << "m =" << m << endl; return 0; }
В главном методе программы объявляются две целочисленные переменные n и m со значениями 3 и 5 соответственно. Именно они передаются аргументами функции mpoint(). Результат записывается в переменную-указатель р. В результате переменная р в качестве значения получает адрес переменной m. Поэтому после выполнения команды (*р)++ значение переменной m увеличивается на единицу.