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

6.4. Директива определения типа typedef

Производный тип задается с помощью * [] struct union, иногда удобно производному типу присвоить одно простое имя, это можно сделать с помощью typedef. При этом после директивы typedef формат определения нового типа соответствует формату определения переменной данного типа, но введенное имя является не именем переменной, а именем нового типа.

Пример:

struct A { … };

A * m[10]; // Массив из 10 указателей на структуру A

Можно поступить по- другому:

typedef A *M[10]; // M – имя нового типа, задающего

// массив из 10 указателей на структуру A

M m; // Массив из 10 указателей на структуру A

Термины

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

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

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

Лекция 7. Функции в Си (Си++)

Функция – это именованная совокупность объявлений и операторов, предназначенная для выполнения некоторой отдельной подзадачи.

Использование функции позволяет выполнять, так называемую функциональную декомпозицию задачи (предметной области). Большая сложная задача разбивается на относительно простые подзадачи и для решения каждой подзадачи разрабатывается функция. Функции можно отлаживать отдельно друг от друга.

Функция в Си основное понятие, любая выполняемая программа содержит, по крайней мере, одну функцию, так называемую главную функцию, с именем main (В Windows приложении эта функция имеет имя WinMain).

7.1. Определение, описание и вызов функции

Следует различать определение функции, описание функции (заголовок) и вызов функции.

Формат определения функции:

[<модификаторы>] <тип_возвращаемого_значения> <имя_функции>([<спецификация_формальных_параметров>])

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

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

<тип1> [<имя1>][=<умалчиваемое_значение>], <тип2> [<имя2>][=<умалчиваемое_значение>],…

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

Тело функции является блоком, в нем локализованы формальные параметры заголовка. Важным оператором тела функции является оператор return, наличие данного оператора обязательно, если тип возвращаемого значения отличен от void. Если функция возвращает некоторое значение, то она может вызываться внутри оператора- выражения в любом месте, где разрешено использовать значение данного типа.

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

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

[<модификаторы>] <тип_возвращаемого_значения> <имя_функции>

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

Примечание. Стандартные заголовочные файлы stdio.h, stdlib.h, math.h и др. содержат описания или заголовки стандартных функций, поэтому их необходимо подключать, если требуется вызывать стандартные функции, описанные в заголовочных файлах.

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

Пример простой функции, которая возвращает сумму двух свои параметров:

double summa(double x, double y)

{

return x+y;

}

Описание или заголовок этой функции имеет вид:

double summa(double, double);

Вызов функции имеет следующий формат (вызов функции часто выполняется внутри оператора- выражения):

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

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

Следует отметить, что функция может вызываться «как функция», когда используется возвращаемое значение и функция вызывается внутри выражения:

S=summa(a, b); // Переменной S присваивается значение, возвращаемое функцией

Функция может вызываться «как процедура», когда возвращаемой значение не используется (если оно вообще не нужно, можно объявить тип void):

printf(“x=%f”, x); // Функция printf возвращает значение типа int, но оно не используется

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