Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Определение структуры (С). Описание и назначение структур. Массивы структур. Передача структуры в функцию.




Структура – тип данных, представляющий собой одну или несколько переменных различных типов, которые сгруппированы для удобства под одним именем. Пример структуры – учетная карточка работающего: "служащий", описывается набором атрибутов, таких, как фамилия, имя, отчество, адрес и т.д. Некоторые из этих атрибутов сами могут оказаться структурами (ФИО).

Структуры оказываются полезными при организации сложных данных особенно в больших программах, поскольку они позволяют сгруппировать связанные данные таким образом, что с ними можно обращаться, как с одним целым, а не как с отдельными объектами. Приведем пример структуры «Дата»:

struct date {

int day;

int month;

int year;

int yearday;

char mon_name[4];

};

Описание структуры, состоящее из заключенного в фигурные скобки списка описаний, начинается с ключевого слова struct. За словом struct может следовать необязательное имя, называемое ярлыком структуры (здесь это date). Такой ярлык именует структуры этого вида и может использоваться в дальнейшем как сокращенная запись подробного описания.

Элементы или переменные, упомянутые в структуре, называются членами. Ярлыки и члены структур могут иметь такие же имена, что и обычные переменные (т.е., не являющиеся членами структур), поскольку их имена всегда можно различить по контексту.

За правой фигурной скобкой, закрывающей список членов, может следовать список переменных. Оператор struct{...} x,y,z; синтаксически аналогичен int x,y,z; в том смысле, что каждый из операторов описывает x, y и z в качестве переменных соответствующих типов и приводит к выделению для них памяти. Также возможно после правой фигурной скобки следующее объявление: struct date{ … } dates[10]. C помощью данной команды был создан массив из 10 экземпляров структуры date.

Элемент определенной структуры может быть указан в выражении с помощью конструкции вида [имя структуры].[элемент] либо

[указатель_на_структуру]->[элемент] (если экземпляром структуры является указатель на нее). Структуры могут быть вложенными.

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

Date current

Date set_current (data next)

{

date prev = current;

current = next;

return prev;

}

Другие допустимые операции, например, такие, как сравнение (== и!=), неопределены.

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

struct link{

link* previous;

link* successor; };

Объединения С. Описание и назначение объединений. Размер объединения. Передача объединения в функцию.

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

Цель введения в программу объединения – иметь переменную, которая на законных основаниях хранит несколько типов. Синтаксис объединений аналогичен синтаксису структур.

unionu_tag {

int ival;

float fval;

char *pval;

} uval;

Все члены объединения вместе занимают такой же объем памяти, какой занимает наибольший член объединения. Переменная uval будет иметь достаточно большой размер, чтобы хранить наибольший из трех типов, независимо от машины, на которой осуществляется компиляция, – программа не будет зависеть от характеристик аппаратных средств. Выравнивание пригодно для всех типов, входящих в объединение. Любой из этих трех типов может быть присвоен uval и затем использован в выражениях, пока такое использование совместимо: извлекаемый тип должен совпадать с последним помещенным типом. Если что-либо хранится как один тип, а извлекается как другой, то результаты будут зависеть от используемой машины.

Синтаксически доступ к членам объединения осуществляется следующим образом:

[имя объединения].элемент или [ указатель объединения] ->элемент

printf("%s\n", uval.pval);

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

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


 

Пять признаков сложной системы

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

Архитектура сложных систем складывается и из компонентов, и из иерархических отношений этих компонентов. Особенности системы обусловлены отношениями между ее частями, а не частями как таковыми.

2. Выбор, какие компоненты в данной системе считаются элементарными, относительно произволен и в большой степени оставляется на усмотрение исследователя.

Низший уровень для одного наблюдателя может оказаться достаточно высоким для другого.

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

3. Внутрикомпонентная связь обычно сильнее, чем связь между компонентами. Это обстоятельство позволяет отделять «высокочастотные» взаимодействия внутри компонентов от «низкочастотной» динамики взаимодействия между компонентами.

Это различие внутрикомпонентных и межкомпонентных взаимодействий обуславливает разделение функций между частями системы и дает возможность относительно изолированно изучать каждую часть.

4. Иерархические системы обычно состоят из немногих типов подсистем, по-разному скомбинированных и организованных.

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

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

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


 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...