Вход/Регистрация
Язык Си - руководство для начинающих
вернуться

Д. МАРТИН

Шрифт:

{ /* начало тела функции */

int z; /* описание локальной переменной */

z = х - у;return(z);

} /* конец тела функции */

II. Передача значений функции:

Аргументы используются для передачи значений из вызывающей программы и функцию. Если значения переменных а и b будут 5 и 2, то при вызове

с = diff(а,b);

осуществляется передача этих значений переменным х и у. Значения 5 и 2 называют ся фактическими аргументами, а переменные х и у, указанные в описании функции: diff– формальными аргументами.

Использование ключевого слова return позволяет передавать в вызывающую программу одно значение из вызываемой функции. В нашем примере переменной с присваивается значение переменной z, равное 3.

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

III. Тип функции

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

Пример

main

{

float q, x, duff; /* описание в вызывающей программе */

int n;

...

q = duff(х, n);

...

}

float duff(u, k); /* описание в определении функции */

float u;

int k;

{

float tor;

...

return(tor); /* возвращает значение типа float */

} 

В ЯЗЫКЕ СИ ВСЕ ФУНКЦИИ РАВНОПРАВНЫ

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

Нет ли у функции main какой-то специфики? Безусловно, есть; она заключается в том, что после "сборки" программы, состоящей из нескольких функций, ее выполнение начинается с первого оператора функции main. Но этим ее исключительность и граничивается. Даже функция main может быть вызвана другими функциями, как показывает приведенный ниже пример:

/* вызовфункции main */

#include

main

{

char ch;

printf (" Укажите произвольный символ. Q - признак конца работы. \n");

ch = getchar;

printf ("Так! Вы указали %с!\n", ch);

if(ch != 'Q') more;

}

more;

{

main;

}

Функция main вызывает more, а функция more вызывает main! После вызова функции main ее выполнение начинается с самого начала; мы организовали цикл с взаимным вызовом.

Функция может даже вызывать сама себя. Упростим предыдущий пример следующим образом:

/* main.main */

#include

main

{

  • Читать дальше
  • 1
  • ...
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: