Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Декларация переменных структурного типаСодержание книги
Поиск на нашем сайте
Доступ к элементам структурной переменной Массивы структур Оператор sizeof Декларация typedef Понятие структуры в языке Си Структура - это одна или несколько переменных, возможно, различных типов данных, которые сгруппированы под одним именем. В языке Си термин "структура" соответствует понятию "запись" в языках программирования. Пример 1: строка таблицы журнала студенческой группы.
Пример 2: точка в пространстве.
Пример 3: круг на плоскости.
Для того, чтобы работать со структурой, необходимо: 1. объявить структурный тип; 2. декларировать переменные этого типа. Объявление типа структуры Синтаксис: struct [<имя = тег>] {<Декларация_члена 1>; <Декларация_члена 2>; ... <Декларация_члена n>; }; Декларация структуры - это описание типа данных. Пример 4: точка А в пространстве. struct struct point {Int xa {int xa; int ya; int ya; int za; int za; };}; / * Без тега * / / * с тегом * / / * Новый тип - struct point * / Пример 5: круг на плоскости. struct struct circle {Float x0 {float x0; float y0; float y0; float r; float r; };}; / * Без тега * / / * с тегом * / / * Новый тип - struct circle * / Декларация переменных структурного типа Синтаксис: I. <Декларация типа структуры> <список переменных>; Это сочетание способов, в котором в одной декларации описывается структурный тип и переменные этого структурного типа. II. struct <тег> <список переменных> В этом случае описание структурного типа с тегом выполняется предварительно, а затем используется для описания переменных. Пример 6: описать прямую, проходящую через точки А i В, Используя ранее введенный тип для представления точки в пространстве. struct struct point {Int xa {int xa; int ya; int ya; int za; int za; } A, b;}; struct point a, b; Инициализации структурных переменных можно выполнить при ее объявлении (по аналогии с массивами): Пример 7: круг с центром (2, 3) и радиусом 5,5. / * Без тега * / / * с тегом * / struct circle pr = {2.0, 3.0, 5.5} {Float x0; float y0; float r; } Pr = {2.0, 3.0, 5.5}; Доступ к элементам структурной переменной Синтаксис: <Имья_структуры>. <имья_члена>
Пример 8: расстояние от (0,0) до точки pt. struct {Float x; float y; } Pr = {20,15} double dist; dist = sqrt ((double) pt.x * pt.x + (double) pt.y * pt.y); printf («От начала координат"); printf ("до точки (% f,% f)", pt.x, pt.y); printf ("расстояние% f", dist); Структуры можно вкладывать друг в друга (нет ограничения на глубину вложения). Прямоугольник на плоскости образуется в результате пересечения двух прямых углов, в которых стороны Параллельные осям координаты, первый из этих углов образуется точкой pt1, второй угол - точкой pt2. Пример 9: задания прямоугольника координатами точек двух углов. struct rectange { struct point pt1; struct point pt2; }; srtuct rectange poly; float a; / * длина стороны а * / a = poly.pt2.x - poly.pt1.x; printf ("Длина стороны a =% f \ n", a);
Массивы структур Структуры можно объединять в массивы (получаем таблицу): Пример 10: список студентов с результатами экзаменов. # Define KST 35 struct list {Char * fio; int math; int phys; int r_l; }; struct list group [KST]; Пример 11: Объявление таблицы с инициализацией. struct list gr [] = { {"Андреев", 5, 5, 5}, {"Борисенко", 5, 4, 4}, .......... {"Якименко", 4, 4, 4} };
Оператор sizeof В декларации списка студентов мы определили размер этого списка (массива структур) с помощью поименованной константы KST: # Define KST 35 Еще один вариант определения размера этого массива такой. Размер этого массива полностью определен во время компляцiи I дорвнюе произведения количества элементов массива на размер его отдельного элемента, поэтому число элементов массива вычисляется: число элементов массива = <размер> group / <размер> struct list В языке Си есть оператор sizeof (унарный, префiксний, правоасоцiативний, высший приоритет). Он работает во время компляцiи. Он применяется для исчисления размера любого объекта: · sizeof <обкт> · sizeof (<имя типа данных>) Результат этого оператора целое, равной размеру (в байтах) объекта или типа данных. Объектом может быть: · переменная; · массив; · структура. Именем типа данных может быть: · имя базового типа (int, long, float,...); · имя производной типа (структуры или указателя). Поэтому в операторi препроцессору define возможные записи: # Define KST (sizeof group / sizeof (struct list)) # Define KST (sizeof group / sizeof group [0]) Второй оператор содержит не <имя типа данных>, а объект (первый элемент массива group).
Декларация typedef Эта декларация позволяет давать новые имена типам данных. Синтаксис: typedef <старое имя типа> <новое имя типа>; Семантика: <Старое имя> i <новое имя> становятся синонимами. Пример 12: объявление таблицы с результами экзаменов студентов. typedef INT Ekz; typedef CHAR * String; typedef Struct List {String fio; Ekz math; Ekz phys; Ekz r_l; } Liststud; Liststud Group [KST]; Этот пример iлюстуе использования того имени типа данных, который был декларирован в typedef. Синтаксис: <Тип, объявленный typedef> <список змнних> Принято имя типа-синоньма, объявление в typedef, начинать с большой буквы, чтобы отличать его от базовых типов. Причины использования typedef: 1. эстетическая: одним именем заменяется сложная декларация типа данных; 2. стремление сделать текст программы более ясным. Например, вместо 3. struct list * pstr; / * указатель на структуру типа list * / можно объявить: typedef struct list * Plist; / * указатель (P List) на структуру типа list * / Plist pstr; 4. typedef використують для обеспечения машинной независимости программы на языке Си. Например, зависят от реализации величины цiлочисельних типов данных (int, short, long) i действительных (double, long double). При переносi на другую платформу меняют только декларации typedef, а не декларации всех переменных (целых i действительных). typedef не создает новый тип данных, а создает только синоним для существующего типа данных.
|
||||
Последнее изменение этой страницы: 2017-01-27; просмотров: 475; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.124.24 (0.005 с.) |