Страница:
145 из 357
Например:
int fac(int n) (*return (n»1) ? n*fac(n-1) : 1; *)
В функции может быть больше одного оператора return: int fac(int n) (* if (n » 1) return n*fac(n-1); else return 1; *)
Как и семантика передачи параметров, семантика возврата функцией значения идентична семантике инициализации. Возврщаемое значение рассматривается как инициализатор переменной возвращаемого типа. Тип возвращаемого выражения проверяется на согласованность с возвращаемым типом и выполняются все стандартные и определенные пользователем преобразования тпов. Например:
double f() (* // ... return 1; // неявно преобразуется к double(1) *)
Каждый раз, когда вызывается функция, создается новая копия ее параметров и автоматических переменных. После возрата из функции память используется заново, поэтому возврщать указатель на локальную переменную неразумно. Содержание указываемого места изменится непредсказуемо:
int* f() (* int local = 1; // ... return amp;local; // так не делайте *)
Эта ошибка менее обычна, чем эквивалентная ошибка при использовании ссылок:
int amp; f() (* int local = 1; // ... return local; // так не делайте *)
К счастью, о таких возвращаемых значениях предупреждает компилятор. Вот другой пример:
int amp; f() (* return 1;*) // так не делайте
4.6.5 Векторные Параметры
Если в качестве параметра функции используется вектор, то передается указатель на его первый элемент. Например:
int strlen(const char*);
void f() (* char v[] = «a vector» strlen(v); strlen(«Nicholas»); *);
Иначе говоря, при передаче как параметр параметр типа T[] преобразуется к T*. Следовательно, присваивание элементу векторного параметра изменяет значение элемента вектора, кторый является параметром.
|< Пред. 143 144 145 146 147 След. >|