русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Структуры


Дата добавления: 2014-03-21; просмотров: 1130; Нарушение авторских прав


Структура является набором логически связанной информации, возможно, различных типов, объединённым в единый программный объект. Термин «структура» в Си/Си++ является синонимом понятия «запись», используемого в Паскале. Оба термина являются взаимозаменяемыми. Структура может означать как тип данных, так иобъект этого типа. Определение структурного типа в Си/Си++ напоминает определение записи в Паскале, но в Си/Си++ отсутсвуют некоторые ограничения Паскаля на размещение указателей.

struct Student

{

char FirstName[10];

char SecondName[15],Surname[20];

int Age;

char Dept[10];

int Year;

};

 

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

Student Petrov; // Объявление структуры типа Student

Student i31[21]; // массив структур

 

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

Статические массивы структур также могут быть инициализированы. Инициализирующие значения для каждого элемента массива помещаются внутри отдельной пары фигурных скобок {}, аналогично инициализации двумерного массива. Если число инициализирующих значений равно числу полей структуры во всех элементах массива, то внутренние фигурные скобки могут быть опущены.

Доступ к компонентам структуры происходит при помощи операции «.»:

Petrov.Year = 3;

 

Имя структурного типа при его определении может отсутствовать, если в программе имеется одна или несколько структур только одного типа.



struct { /* поля структуры */ } st1, st2, st3;

 

Операция & позволяет получить адрес структуры, который может храниться в указателе.

Student *r32; // указатель на структуру

r32 – адрес структуры типа Student

*r32 – сама структура

 

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

(*r32).Age = 30;

 

Приоритет операции «.» выше, чем операции *, поэтому круглые скобки ( ) в данном случае необходимы. Возможна другая, чаще используемая, форма доступа к полям структуры через указатель при помощи операции –> :

r32–>Age = 30;

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

Student& PrintInfo(Student&);

 

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

struct Err

{ Err d; ... }; // Ошибка

struct Corr

{ Corr *pc; ... };

 

Полем определяемого структурного типа может быть структура, тип которой уже определён.

struct Beg{...} golf;

struct next{ Beg st; ...};

 

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

struct A; // Неполное определение

struct B {struct A *pa};

struct A {struct B *pb};

 

Неполное определение структурного типа A можно использовать в определении структурного типа B, так как определение указателя pa на структуру типа A не требует информации о размере структуры типа A. Последующее определение структурного типа A обязательно. Использование в структурах типа A указателей на структуры уже введенного типа B не обладает какими-либо дополнительными особенностями и не требует пояснений.

Структурный тип может быть определен с помощью спецификатора typedef.

typedef struct { double Re,Im; } complex;

complex Z1,Z2;

 

struct a1

{ ...

int oscar;

};

struct a2

{ ...

a1 lima; // поле ранее определенного структурного типа

}tango; // совместное определение структурного типа и его объекта

//...

tango.lima.oscar=256; // доступ к вложенному полю объекта tango

 



<== предыдущая лекция | следующая лекция ==>
Интегральные типы данных (структуры, битовые поля, объединения) | Объединения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.846 сек.