Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пиппец 2.doc
Скачиваний:
106
Добавлен:
07.06.2015
Размер:
3.16 Mб
Скачать

58. Типы данных в яп

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

Классификация типов данных Си.

Типы данных Си:

  1. пустой тип (void)

  2. простые (скалярные типы)

  • арифметические типы

  1. целые типы(int, long, short, char)

  2. вещественные типы (float, double, longdouble)

  • перечисляемый тип

  • указатели

  • структурные (агрегативные типы)

    • массивы

    • структуры

    • объединения

  • тип «функция»

    Тип void (пустой).

    Тип void имеет специальное назначение. Указание типа void в качестве возвращаемого значения функции означает, что эта функция не возвращает ни какого значения. Указание типа void в списке объявлений аргументов функции означает, что эта функция не принимает аргументов. Нельзя объявить переменную типа void. Однако можно объявить указатель на тип void, он будет указывать на любой, т.е. неспецифированный тип. Тип void может быть указан в операции приведения типа. Приведение значения выражения к типу void означает, что это значение не используется.

    Характеристика целых типов.

    Целые типы в Си:

    1. int – знаковый целый, 4 байта

    2. unsigned int – беззнаковый целый, 4 байта

    3. short – знаковый короткий целый, 2 байта

    4. unsigned short int – беззнаковый короткий целый, 2 байта

    5. long – знаковый длинный целый, 4 байта

    6. unsigned long int – беззнаковый длинный целый, 4 байта

    7. char – знаковый или беззнаковый символьный, 1 байт

    Представление в памяти и область значений для типов int и unsigned int не определены в Си. Размер типа int зависит от размера машинного слова. Для 16-разрядных ПК это 2 байта. Для 32-разрядных – 4 байта.

    Тип char является символьным типом. Код то 0 до 255 задаёт один из 256-ти возможных символов. Закрепление конкретных символов за кодами задаётся кодовыми таблицами. Например ASCII-таблица. Константа типа char представляет собой символ, заключённый в одиночные кавычки. Например: ‘A’, ‘$’. Переменная типа char занимает 1 байт. При объявлении ей можно задать начальное значение (инициализировать). Например: char name = ‘0’.

    Типы с плавающей точкой в Си:

    1. float – плавающий одинарной точности, 4 байта

    2. double – плавающий двойной точности, 8 байт

    3. long double – длинный плавающий двойной точности, 8 байт

    Перечислимый тип.

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

    Синтаксис объявления переменной (или нескольких переменных) перечислимого типа:

    enum [<имя шаблона>] {<список перечисления>} <имя переменной (или переменных через ,)>

    где <имя шаблона> - это идентификатор, который именует перечислимый тип (имя типа).

    Примечание. В некоторых источниках имя шаблона называют тегом.

    Например:

    enum day {MON, TUES, WED, TH, FR} work;

    Здесь объявлена переменная перечислимого типа с именем work, где day – имя шаблона (тег).

    Переменная перечислимого типа может принимать значения только из своего списка перечисления. Каждому элементу списка перечисления ставится в соответствие целое число, причём, если эти числа (значение элементов списка) явно не заданы, то элементы нумеруются от 0. таким образом, элементы списка имеют тип int. Поэтому перечислимый тип представляет собой множество целого типа. Над объектами перечислимого типа определены те же операции, что и над объектами целого типа.

    Массив - это последовательность элементов одного типа, расположенных вплотную друг за другом в памяти ЭВМ. Каждый массив имеет имя. Доступ к отдельным элементам массива осуществляется по имени массива и индексу элемента. Основные свойства массива: все элементы массива имеют один и тот же тип; все элементы массива расположены в памяти друг за другом, причем, индекс первого элемента равен 0; имя массива является указателем-константой, равной адресу начала массива (адресу первого байта первого элемента массива). Объявление массива Синтаксис: [<имя типа>]<имя массива>[<константное выражение>] Индекс первого элемента массива всегда равен 0. Таким образом, индекс последнего элемента на единицу меньше, чем число элементов в массиве. Например: int а[10]; Двум масс Напр: char b[2] [3] Объявление массивов с инициализацией - это присваивание начальных значений элемен­там массива.

    float b[2] = {3.0, 5.1}; 2) char st[] = { 'а' , b' , 'с' };

    Структура –это объединенное в единое целое множество элементов (компонентов) данных не обязательно одного типа, имеющее одно имя. Отдельные составные части структурной переменной называются полями. Каждое поле должно иметь уникальное в пределах одной структуры имя. Объявление структуры может состоять из двух этапов: задание шаблона структуры; собственно объявление структурной переменной. Синтаксис задания шаблона: struct<имя шаблона><тип поля><имя поля>; <тип поля> <имя поля>; ..<тип поля> <имя поля>; Здесь struct служебное слово языка; <имя шаблона> -идентификатор, произвольно выбираемый программистом; <имя поля> - также идентификатор; <тип поля> - любой допустимый в языке тип, как стандартный, так и определяемый пользователем.

    Напр: struct book{char name[20]; char title[40]; int year; char publisn[30]; float price;};

    Фактически задание шаблона представляет собой создание нового типа данных. В приведенном примере был введен новый тип с именем struct book. Синтаксис объявления структурной переменной: <имя структурного типа> <имя структурной переменной> Напр:struct book my_book; Возможно объявление структурной инициализацией. struct book textbook.

    Выделение памяти для структур происходит в момент определения структурной переменной (объекта). Память для структурной переменной выделяется в таком количестве, чтобы могли разместиться данные всех ее элементов (полей). Для доступа к полям структурной переменной по имени можно использовать операцию "." (точка). <имя структурной перем><имя поля>

    Указатели на структуры. Напр. struct book*ptr bookl; //Объявлен указатель на структуру.

    Доступ к полям структурной переменной через указатель осуществляется через операцию -> (стрелка). Эта операция имеет самый высокий ранг наряду со скобками и операцией "точка". Формат применения операции -> в самом простейшем случае следующий: <указатель на структуру>-><имя поля> Напр:ptr bookl -> year. Существует другой способ доступа к полям структуры через указатель:

    (*ptr_bcoki) .year.

    Record – составной тип данных, объединяет в себе разнотипные эл-ты, кот представляют собой единое лог целое. <имя типа>=Record <имя поля>:тип поля; ..<имя поля>:тип поля; end; пр. type book = record title:string[80]; year:integer; end;