Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора по информатике.docx
Скачиваний:
6
Добавлен:
18.09.2019
Размер:
819.82 Кб
Скачать

10 Рекурсивные функции. Массивы и функции языка си.

Рекурсивные вызовы функций- функция вызывает сама себя. Массивы могут быть использованы в качестве формальных параметров

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

Void(int A[10])

int j=0

{def

scanf(“%d”,A[i]}

11 Типы определяемые пользователем: структуры языка си.

Структура-совокупность взаимосвязанных элементов одного или разных типов. Взаимосвязь определяет порядок размещения элементов структуры. Элементы структуры объединяются под одним общим именем. Элементы структуры-переменные базового типа, массивы, указатели, объединения и другие структуры. Элементом не может быть элемент структуры того же типа. Но этот элемент может быть указателем на тип структуры. Структура задается в программе следующим образом:

Struct book(имя){char title[40]Char outchar;Float price;}

Структурные переменные могут быть глобальными, локальными и формальными.

Структуры struct имя_структуры { описание элемента структуры, ... };

Поля бит в структурах struct имя_структуры { описание элемента структуры : кол-во бит, ... };

Объединения union имя_объединения { описание элемента объединения, ... };

Перечисления enum имя_перечисления { список значений };

12 Типы определяемые пользователем: объединения, битовые поля, перечисляемый тип, оператор переименования типа языка си.

Объединение – предустмотрено для размещения в памяти нескольких переменных разного типа.

Union <имя>{Переменные;}

Union U –определение

{int I;Float P;Char ch;}

Для объединения в памяти выделяется столько памяти, сколько требуется для хранения небольшого элемента.

p.ch = 1; -вызов, обращение.

Битовое поле.Структуры могут создать битовое поле.

Тип <имя>: ширина поля;

Типы:Char, Unsingchar, Int, Unsingint

Если имя битового поля упущено, то мы не можем обратиться к нему, но ширина будет зарезервирована в памяти.

Если ширина равна нулю, то следующее поле будет начинаться со следующего слова памяти.

Struct str{Int i:3;Unsigned j:4;Int :4;Int k:2;} a;Tipedef

С помощью данного оператора можно задавать новое имя уже существующим типам.

Tipedef char Simbol;Symbol t;Char t;

Перечисляемый тип (enum) задает имя переменной и определяет список именованных const, значение которых она может принимать.Enum{one,two,three} по умолчанию тип int.Enum{one =5, two, three}

13 Классы памяти и область видимости языка си.

Класс выделяемой памяти определяется спецификатором класса памяти, и определяет время жизни и область видимости переменной, связанные с понятием блока программы. Спецификатор класса памяти в объявлении переменной может быть auto, register, static или extern. Если класс памяти не указан, то он определяется по умолчанию из контекста объявления.

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

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