Функции в языке С. Объявление функции. Оператор return. Прототипы функций. Параметры и аргументы функции

Страницы работы

Содержание работы

Лекция  Функции в языке С

Объявление функции. 1

Оператор return. 1

Прототипы функций. 3

Параметры и аргументы функции. 5

Аргументы функции main() 8

Указатель на функцию... 10

Функции - это строительные блоки языка С, самостоятельные единицы программы, спроектированные для решения конкретных задач, обычно повторяющиеся несколько раз.

Объявление функции

Основная форма описания (definition) функции имеет вид тип <имя функции>(список параметров)

{

тело функции

}

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

В списке параметров для каждого параметра  должен быть указан тип.  iПример правильного списка параметров: f(int х, int у, float z)

Пример неправильного списка параметров: f(int х, у, float z)

Оператор return

Оператор return, с которым мы уже встречались, имеет два варианта использования.

Во-первых, этот оператор вызывает немедленный выход из текущей функции и возврат в вызывающую программу.

Во-вторых, этот оператор может использоваться для возврата значения функции.

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

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

float step(float a, int b)

float i;

if (a<0) return (-1); /* основание отрицательное */

a=1;

for(i=b;i;i--) a*=a;                                                                       '                1R"

return a;                                                                                   '*                  ''

}

Эта функция возвращает значение -1, если основание отрицательное, и an, если основание   неотрицательное.

Другой пример - функция для нахождения наибольшего из двух чисел: max(int a, int b)

int m;

if(a>b) m=a;   

else    m=b;    

return m;

}

Возможно также написать эту функцию без использования дополнительной переменной:

max(int a, int b)

{

if(a>b) return a;

else return b; >

Можно еще короче:

max(int a, int b)      

{          

if (a>b) return a;     

return b;

А можно и так:   

max(int a, int b) 

return (a>b)? a: b;

}

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

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

Использование функций, возвращающих указатели, имеет некоторые особенности. Указатели не являются ни типом целое (int), ни типом беззнаковое целое (unsigned int). Их значениями являются адреса памяти данных определенного типа. Соответственно должна быть описана и функция. Рассмотрим пример описания функции, возвращающей указатель на тип char. Эта функция находит в строке первый пробел и возвращает его адрес.

char* find(char* string)

{

int i=0;

while (string[i] !=' ')&&(string[i] != '\0') i++; if (s[i]) return &s[i];   /* возвращает адрес первого пробела */ else return NULL;/* возврат нулевого указателя */

}

Когда функция не возвращает никакого значения, она должна быть описана как функция типа void (пустая).

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

Прототипы функций

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

Прототип функции задается следующим образом:

тип <имя функции>(список параметров);

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

int fiinc(int a, float b, char* с); или так:

int func(int, float, char*);

Два этих объявления абсолютно равносильны.

Рассмотрим пример.                                                              

# include <stdio.h>                                                                           

/♦Пример 33 */

float sqr(float a); /* это прототип функции, объявление функции */         ' ■

Похожие материалы

Информация о работе

Предмет:
Информатика
Тип:
Конспекты лекций
Размер файла:
114 Kb
Скачали:
0