|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Синтаксис объявления (--заголовка, --прототипа ) функции. Оператор returnС понятиям ф-ции связано: 1) объявление (заголовок, прототип) 2) описание (определение) 3) вызов ф-ции 1) прототип нужен компилятору, если описание идет ниже вызова Область видимости ф-ции от обьявления до конца файла Все параметры позиционные (не ключевые), есть парам-ы по умолчанию (нах-я в конце, можно не писать) [<спецификация>]<тип_рез> <идентификатор>([список_парам]); Специф-я: например, extern – внешнее (по умолч.) Список парам: может быть без имен, важно сколько и порядок типов. Примеры: double sum1(int, float); float sum2(double *, int); char * message(char * s1, char c); void show(void); int f1(int k, char *, …); //ф-ция имеет переменное число парам, типы которых не контролируются в отличии от фиксированных парам-ов printf(char * format, …); 2) описание: <тип_рез-а> <идентификатор> (<список_ парам>) {… [return <выражение>;] //-если не void, управление передается в точку возврата (туда где вызывали), если на return не попали, то в рез-те получим мусор } Тип рез-та может быть указ-ем, но на те эл-ты, которые существуют когда ф-ция не активна, т.е. нельзя возвращать адреса локальных автоматических переменных (automatic –автоматическая память, для локальных переменных, state – для глобальных). int f1(float t) {char * mes; // существует только когда работает //эта ф-ция … return mes; //-error } int * f2 (int k) {int m = k*10;
//return &m; - bad (error, но компилятор не выдаст //ошибки, т.к. синтаксической ошибки нет) } Локальные переменные ф-ции размещаются в стеке, после окончания выполнения ф-ции стек-поинтер перейдет в начало стека, и область память, отводившаяся на лок. перем. снова станет «свободной». Допускается: int * f2 (k) int k {… } Если в качестве парам-а ф-ции используется массив, то всегда передается указатель на его первый эл-т, т.е. в языке С невозможно передать массив по значению, он всегда передается адресом. Размер массива передается как правило с дополнительным парам-ом, т.к. ни сама ф-ция, ни сам массив информацию по его размеру получить не смогут. 3)Вызов ф-ции имеет следующий формат: выражение1 ([список выражений]); не обязательно отдельный оператор например: t = fabs (sin(x)) + 2 * r - 1.5; суперпозиция ф-ций В отличие от паскаля, нет разделения на ф-ции и процедуры. Процедура в с – ф-ция, возвращающая void. Мб ф-ция, без возврата и параметров: getch(); clrscr(); char c = clrscr(); Зн-ем выражения1 должен быть адрес ф-ции (идентификатор либо указатель на ф-цию). Список выражений – это список фактических аргументов (любая величина основного типа, структура, перечисление, объединение или указатель, в том числе на массив или ф-цию) При вызове вычисляются выражения в списке, сравниваются с типом соответствующих формальных парам-ов, если они не совпадают, то производится попытка преобразования к типу формального параметра, в случае неудачи – сообщение об ошибке, если эл-т в списке является вызовом ф-ции (суперпозиция), то он имеет тип и зн-ие возвращаемого рез-а ф-ции Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |