Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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




Ответ:

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

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

Функция – отличается от процедуры тем, что дополнительно всегда возвращает одно результирующее значение.

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

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

a = b + 2 * foo(c);

Вызовфункции

Синтаксис вызова функции:

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

Где:

обозначение_функции – имя_функции.

список_фактических_параметров – список выражений, количество, тип и порядок следования которых соответствуют списку формальныхпараметров функции.

Порядок вычисления значений фактических параметров перед вызовом функции (в т.ч. преобразования типов) неопределен.

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

Объявление (declaration) функции – предварительное описание функции (прототип/сигнатура функции)

Прототип функции определяет:

· Тип возвращаемого значения.

· Тип и число аргументов.

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

Синтаксис объявления функции:

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

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

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

· Функция должна вызываться из других модулей (в этом случае прототип помещается в h-файл).

 

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

// прототип для func1 обязателен

func1 (char d, int y);

// прототип для func2 не обязателен

// можносразуопределение

int func2(char symb, int shft)

{

return (int)symb - shft;

}

int main(void)

{

char a;

int b, c;

c = func1(a, b);

c = func2(a, b);

return 0;

}

int func1(char symb, int shft)

{

return (int)symb + shft;

}

Формальные и фактические параметры

· Формальные параметры существуют в прототипе и теле определения функции. Они доступны внутри функции как локальные переменные.

· Фактические параметры существуют в основной программе (вызывающей функции). Они указываются при вызове функции на месте формальных.

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

intfoo(inta, intb)

{

 // привходе a = 1, b=2

a = a + b;

}

int main(void)

{

float z;

z = foo(1, 2.75);

return 0;

}

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

Процедуры и функции в языке Си. Параметры-переменные, параметры-значения. Примеры.

Ответ:

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

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

Функция – отличается от процедуры тем, что дополнительно всегда возвращает одно результирующее значение.

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

Синтаксис определения (definition) функции:

тип имя(список_параметров)

{

тело функции

}

Где:

· тип – тип возвращаемого значения. Особые случаи:

o void – нет возвращаемого значения (т.е. функция – эквивалент процедуры);

o тип опущен – по умолчанию предполагается тип int

· список_параметров – список формальных параметров (возможно пустой) разделенных запятыми, каждый элемент которого имеет вид:

тип имя_параметра

Примеры:

int sum(int x, int y) { int k; k = x + y; return k ; }   sum(int x, int y) // неявныйтип int { int k; k = x + y; return k; } int sum(int x, int y) { int k; k = x + y; return; // нет значения } int sum(int x, int y) { int k; k = x + y; // поумолчанию return; }

Параметры-переменные – параметры, служащие для возвращения результатов в основную программу.

Параметры-значение – параметры, служащие для передачи данных из программы в подпрограмму.

В каких случаях использовать параметры значения, а в каких - параметры-переменные:

Как осуществляется замена формальных параметров на фактические в момент обращения к подпрограмме?

· Если параметр определен как параметр-значение, то перед вызовом подпрограммы это значение вычисляется, полученный результат копируется во временную память и передается подпрограмме.

· Если же параметр определен как параметр-переменная, то при вызове подпрограммы передается сама переменная, а не ее копия. Любые возможные изменения в подпрограмме параметра-значения никак не воспринимаются вызывающей программой, так как в этом случае изменяется копия фактического параметра, в то время как изменение параметра-переменной приводит к изменению самого фактического параметра в вызывающей программе.

Описание всех формальных параметров как параметров-переменных нежелательно по двум причинам.

· Это исключает возможность вызова подпрограммы с фактическими параметрами в виде выражений, что делает программу менее компактной.

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

20.Глобальные и локальные переменные в языке Си. Видимость объектов.Примеры.

Ответ:

Глобальные переменные

· Используются для описания данных, которые должны быть доступны в нескольких функциях, модулях.

· Как правило - описываются вне блоков (вначале модуля).

· Существуют все время исполнения программы.

· Главная проблема: сложность контроля за изменением данных (возможно в любых точках программы).

Локальные переменные

· Используются для временного хранения данных (внутри блока, функции).

· Описываются внутри блока

· Уничтожаются при выходе из блока

· Не рекомендуются при описании неизменяемых значений (констант)

int a;                          int function (int b, char c);     void main (void) {                                 int d, e;                              float f;                                  ...           } int function (int b, char c) {                                 char g;                            ... } // Определение глобальной переменной // Объявление функции (т.е. описание ее заголовка)     //Тело программы //Определение локальных переменных //Определение локальной переменной     //Определение функции и формальных параметров //Тело функции //Определение локальной переменной  

Область видимости - часть текста программы, в которой может быть использован данный объект. Область видимости имени начинается в точке объявления (сразу после объявителя, но перед инициализатором).

Видимость переменных и функций в программе определяется следующими правилами:

· Переменная, объявленная или определенная глобально, видима от точки объявления или определения до конца исходного файла.

· Переменная, объявленная или определенная локально, видима от точки объявления или определения до конца текущего блока.

· Переменные из объемлющих блоков, включая переменные объявленные на глобальном уровне, видимы во внутренних блоках ("вложенная видимость").

· Функции с классом памяти static видимы только в исходном файле, в котором они определены. Всякие другие функции видимы во всей программе.










Последнее изменение этой страницы: 2018-04-12; просмотров: 664.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...