Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dop_Prog_функ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
240.64 Кб
Скачать

11

2 Функции

Это элементи програми, используемые неоднократно для выполне­ния определенных действий (вычислений, обмена данными и т.д.). Каждая программа содержит одну главную функцию main(), либо функцию main() и любое количество других функций.

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

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

тип_функции имя_функции(список_формальных_параметров)

{ тело функции }

Первая строка функции называется заголовком функции:

Тип_функции – это тип возвращаемого функцией значения. Если функция ничего не возвращает, то тип функции обозначается void.

Имя_функции – это любой уникальный идентификатор.

Список_формальных_параметров (или сигнатура функции) – это пусто или void, если в функцию не передаются параметры, либо список спецификаций отдельных параметров с указанием типов и имен, записанных черех запятую.

Тело функции – это последовательность определений, описаний переменных и операторов, заключенных в фигурные скобки.

Когда функция вызывается, управление передается в начало тела функции. Возврат в точку вызова функции выполняется оператором return выражение или return.

Вызов функции (обращение к функции) – это выражение, в котором указывается имя функции и список фактических параметров в круглых скобках. Результатом этого выражения является возвращаемое значение, тип которого соответствует типу функции:

имя_функции(список фактических параметров)

где список_фактических_параметров – это либо пусто, либо void, либо фактические параметры (константы или заранее определенные переменные, переменные с преобразованием типов, выражения).

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

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

Все параметры функции (кроме указателей и массивов) передают­ся по значению, т.е. для передаваемых (фактических) параметров в функции создаются копии этих параметров, под которые в стеке выделяется память. Действия, производимые над этими копиями в теле функции, не влияют на переменные вне функции, т.е. на фактические переменные.

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

Пример 2.1

int func1(int a, int b)

{return a+b;}

float sqr(float f, float g)

{ return f*g;}

int main()

{int am=2, bm=3,res1, res4;

res1=func1(am,bm);

float em=2.5,gm=3.0,fm=4.2,res2,res3;

res2= sqr(em,gm);

res3= sqr(fm, sin(em));

res4=(int)sqr(em,float(am));

return 0;}

Пример 2.2

#include <stdio.h>

int sum(int, int);

int main()

{int a1,а2, b=3, g=4;

a1=sum(b, g);

а2=sum(20, g);

printf("Сумма1=%d cумма2=%d \n", a1,a2);

return 0;}

int sum(int arg1, int arg2)

{ return arg1+arg2;}

Пример 2.3

#include <stdio.h>

void swap(int *a, int *b)

{printf("&a=%p a=%p *a=%d\n",&a,a,*a);

printf("&b=%p b=%p *b=%d\n",&b,b,*b);

int tmp=*a;

*a=*b; *b=tmp;

printf("*a_n=%d *b_n=%d\n",*a,*b);}

void main()

{int i=5,j=60;

printf("&i=%p i=%d\n &j=%p j=%d\n",&i,i,&j,j);

swap(&i,&j);

printf("i=%d j=%d\n",i,j);}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]