Возврат в вызывающую функцию

По окончании выполнения вызываемой функции осуществляется возврат значения в точку ее вызова. Это значение присваивается переменной, тип которой должен соответствовать типу возвращаемого значения функции. Функция может передать в вызывающую программу только одно значение.Для передачи возвращаемого значения в вызывающую функцию используется оператор return в одной из форм:

 

return(ВозвращаемоеЗначение);

return ВозвращаемоеЗначение;


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

Оператор return также завершает выполнение функции и передает управление следующему оператору в вызывающей функции. Оператор return не обязательно должен находиться в конце тела функции.

Функции могут и не возвращать значения, а просто выполнять некоторые вычисления. В этом случае указывается пустой тип возвращаемого значения void, а оператор return может либо отсутствовать, либо не возвращать никакого значения:

return;


Пример: Посчитать сумму двух чисел.

#include <stdio.h>
// Функция вычисления суммы двух чисел
int sum(int x, int y) // в функцию передаются два целых числа
{
int k = x + y; // вычисляем сумму чисел и сохраняем в k
return k; // возвращаем значение k
}
int main()
{
int a, s; // описание двух целых переменных
printf("a= ");
scanf("%d", &a); // вводим a

printf("b= ");
scanf("%d", &b);
s = sum(a, b); // вызов функции: x=a, y=b
printf("%d +%d = %d", a,b, s); // вывод: a + b = s
return 0;
}

 

В качестве результата функции могут возвращать значения базовых типов, структур, объединений и указателей. Любая функция допускает рекурсивное обращение к себе. Как правило, локальные переменные функции — "автоматические", т. е. они создаются заново при каждом обращении к ней.

В языке Си нельзя определять одну функцию внутри другой.

В языке Си нет требования, чтобы семантика функции обязательно предшествовало её вызову. Функции могут определяться как до вызывающей функции, так и после нее. Однако если семантика вызываемой функции описывается ниже ее вызова, !необходимо до вызова функции определить прототип этой функции!, содержащий:

Ø тип возвращаемого значения;

Ø имя функции;

Ø типы формальных аргументов в порядке их следования.


Прототип необходим для того, чтобы компилятор мог осуществить проверку соответствия типов передаваемых фактических аргументов типам формальных аргументов. Имена формальных аргументов в прототипе функции могут отсутствовать.

Если в примере выше тело функции сложения чисел разместить после тела функции main, то код будет выглядеть следующим образом:

#include <stdio.h>
int sum(int, int); // сигнатура-прототип
int main()
{
int a, r;
printf("a= ");
scanf("%d", &a);
r = sum(a, 5); // вызов функции: x=a, y=5
printf("%d + 5 = %d", a, r);
return 0;
}
int sum(int x, int y) // семантика
{
int k;
k = x + y;
return(k);
}

 

дз2.Напишите простой калькулятор на Си

 

Функции программы на Си могут храниться в отдельных исходных файлах и компилироваться независимо. Переменные по отношению к функции могут быть внутренними и внешними. Последние могут быть доступными в пределах одного исходного файла или всей программы

 

дз3.Реализовать функцию void swap(int,int) с массивом

дз4.Заполняем числами массив из 10 элементов. Нужно поменять местами наибольший и начальный элементы массива. Используем функцию для поиска максимального элемента и обмена

 








Дата добавления: 2017-04-20; просмотров: 305;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.