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, в точности та же, что и в предыдущем примере.)