Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике.doc
Скачиваний:
118
Добавлен:
02.05.2014
Размер:
1.53 Mб
Скачать

Возврат функцией значений

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

return(result);

Тип функции определяет тип возвращаемого ею значения (int,float, char и т.д.). Например, если функция возвращает значение типа int, то имени функции должно предшествовать то же самое имя типа:

int some_function(int value)

{

// Оператор функции

}

Следующая функция i_cube возвращает куб от целого значения, определенного в качестве параметра. Например, если в функцию передается 5, то i_cube будет возвращать значение равное 5*5*5 или 125:

int i_cube (int value)

{

return(value * value * value);

}

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

result = i_cube(5);

printf("Kyб от 5 равен %d\n", i_cube(5));

Если функция должна возвращать значение другого типа (float, double, char и т.д.), то этот тип необходимо задавать при объявлении функции. В следующей программе функция average_value используется для вычисления среднего арифметического трех значений типа int. При этом значение, которое возвращается функцией, имеет тип float:

#include<stdio.h>

float average_value(int a, int b, int c)

{

return ((a + b + с) / 3.0);

}

void main(void)

{

printf("Среднее от 100, 133 и 155 равно %f\n",

average_value(100, 133, 155));

}

Как можно видеть, тип возвращаемого функцией значения определяется в заголовке функции:

float average_value(int a, int b, int с)

Примечание: Если компилятору не сообщается тип возвращаемого функцией значения, то в качестве такового по умолчанию считается int.

Встречая оператор return, Си немедленно завершает выполнение функции, возвращая указанное значение в вызывающую функцию. Любые операторы, следующие в функции за оператором return, игнорируются. Выполнение программы продолжается с оператора, следующего за оператором вызова данной функции.

По мере увеличения количества созданных функций, вероятно, встретятся функции, которые не должны возвращать значения. Если функция не должна возвращать значение, следует объявить ее типа void следующим образом:

void my_function (int age, char *name);

Если в дальнейшем в программе будет предпринята попытка использовать значение функции

result = my_function (32, "Jamsa");

то компилятор выдаст ошибку.

Переменные в функциях

Если программа содержит другие функции, кроме функции main(), вам необходимо решить, где и как вы будете определять переменные. Си имеет несколько типов переменных. Для временного хранения информации используется стек. Основное назначение стека - организация вызова функций на выполнение. При вызове в программе функции Си прежде всего сохраняет в стеке адрес оператора, следующего за вызовом функции (называемый адресом возврата). Далее Си размещает в стеке параметры функции в порядке справа налево.