Возвращение результата
В прошлой теме была определена функция factorial, которая в качестве возвращаемого типа имела тип void, то есть по факту ничего не возвращает:
1
2
3
4
5
6
7
8
9
void factorial(int n)
{
int result = 1;
for(int i=1;i<=n;i++)
{
result *= i;
}
printf("factorial of %d is equal %d \n", n, result);
}
Хотя эта функция не использует явно оператор return, но компилятор сам его добавляет автоматически в конец функции:
1
2
3
4
5
6
7
8
9
10
11
void factorial(int n)
{
int result = 1;
for(int i=1;i<=n;i++)
{
result *= i;
}
printf("factorial of %d is equal %d \n", n, result);
return;
}
Эти оба определения фактически равнозначны.
Но также функция может возвращать какое-то конкретное значение. Например, изменим функцию factorial, чтобы она возвращала вычисляемое значение:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
int factorial(int n)
{
int result = 1;
for(int i=1;i<=n;i++)
{
result *= i;
}
return result;
}
int main(void)
{
int arg,f;
arg = 4;
f = factorial(arg);
printf("factorial of %d is equal %d \n", arg, f);
arg = 6;
f = factorial(arg);
printf("factorial of %d is equal %d \n", arg, f);
return 0;
}
Теперь функция factorial в качестве возвращаемого типа имеет тип int. Если тип функции отличен от void, то функция обязательно должна возвращать значение данного типа. Для возвращения значения применяется оператор return, после которого указывается возвращаемое значение.
В данном случае функция factorial возвращает значение переменно result, которая содержит факториал числа.
Если функция возвращает какое-либо значение, то при ее вызове мы можем получить это значение в переменную:
1
f = factorial(arg);
Как и в случае с параметрами и аргументами функции возвращаемое значение должно соответствовать типу функции. Если подобного соответствия нет, компилятор пытается выполнить преобразование возвращаемого значения к типу функции:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int exchange(double rate, double sum)
{
return sum/rate;
}
int main(void)
{
printf("%d \n", exchange(56.83, 24560));
return 0;
}
В данном случае функция exchange возвращает объект типа int, но возвращаемое значение, описываемое выражением sum/rate будет представлять тип double, поэтому в данном случае компилятор автоматически выполнит преобразование:
1
return (int)sum/rate;