250 Часть II. Программирование на C++

Возврат с использованием операции разыменования

Операция разыменования (*), используемая вместе с возвращаемым аргументом функции означает, что возвращается указатель на объект. Объявление функций с такими возвращаемыми типами выглядит следующим образом:

type* func_name( args_list);

Операция разыменования располагается между возвращаемым типом и именем функции, звездочка (*) — обозначение операции разыменования — связана с возвращаемым типом. Это значит, что таким образом описанные функции должны возвращать указатель на тип, то есть адрес. Например:

char* DayOfWeek( unsigned int julianDate) {

static char *weekday[] =' ("Sunday", "Monday", "Tuesday",»

"Wednesday", "Thursday", "Friday", "Saturday" };

return weekday[ julianDate % 7];

}

Функция DayOfWeek получает julianDate — общее число дней, прошедших с какой-то определенной даты — и возвращает день недели в виде указателя на char. Переменная weekday — это массив указателей на char, то есть каждый элемент weekday [i] принадлежит к типу char*, в полном соответствии с возвращаемым типом функции.

Совет

Массив указателей char* специально объявлен как static: переменные внутри функций обычно существуют только в пределах локальной области видимости функции. Объявив массив как статический, мы обеспечиваем сохранность его значений в промежутках между вызовами функций.

Также можно использовать операцию получения адреса, обозначаемую символом амперсанда (&). Вот еще одна функция, возвращающая указатель:

type* FunctionName( arglist) {

static type variable;

// какой-то код

return & variable;

} •

Поскольку значением указателя в действительности является адрес, то понятно, что функция может возвратить адрес переменной того же типа, что и тип возвращаемого указателя. (Причина, по которой эта переменная объявлена как static, в точности та же, что и в предыдущем примере.)