Мегаобучалка Главная | О нас | Обратная связь


Операции и доступ к компоненту структуры



2015-11-12 160 Обсуждений (0)
Операции и доступ к компоненту структуры 0.00 из 5.00 0 оценок




Структуры

Структура - это поименованная совокупность одного или нескольких элементов возможно различных типов. Элементы структуры могут быть любого основного типа, массивом, указателем, смесью, структурой, То есть, никаких ограничений на тип элементов структуры нет. Единственное ограничение - элементом структуры не может быть элемент описываемого структурного типа (но может быть указатель на данный структурный тип, то есть можно строить связанные списки).

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

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

Описание структуры начинаются с ключевого слова struct и имеют два формата.

 

Формат 1

 

Struct

[ имя_типа_структуры ]

{ список_описаний_элементов }

[ список_идентификаторов ];

 

Квадратные скобки здесь обозначают необязательность элементов формата.

 

Формат 2

 

struct имя_типа_структуры список_идентификаторов;

 

То есть во втором формате мы уже ссылаемся на ранее определенный структурный тип.

В С++ имя типа структуры может использоваться точно так же, как и основные встроенные типы, поэтому слово struct можно опустить:

имя_типа_структуры список_идентификаторов;

 

Ниже приведен пример описания структуры типа DATE (дата):

struct DATE

{ int day;

char month[4];

int year; };

 

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

В дальнейшем введенный структурный тип можно использовать для определения переменных, например:

 

DATE date1,date2[20], * pntdate;

Рассмотрим структуру описывающую адрес

 

struct address

{ char state[21];

char town[21]; // город

char street[31]; // улица

char name[41];

int number; // номер дома

};

 

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

 

struct

{

char state[21];

char town[21]; // город

char street[31]; // улица

char name[41];

int number; // номер дома

 

 

} adres1, arrayadres[50]; .//.переменные

 

Структуры и функции

Функция может иметь возвращаемое значение типа структуры или указателя структуры.

mystruct func1(void); // func1() возвращает структуру mystruct*func29void); // func2() возвращает указатель структуры

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

void func1 (mystruct s); // непосредственноvoid func2 (mystruct *sptr); // через указательvoid func3 (mystruct &sref); // по ссылке (только С++)

Операции и доступ к компоненту структуры

Над структурами определены только три операции:

- "&" - взятие адреса;

- "." - выбор элемента структуры с помощью имени структуры;

- "->" - выбор элемента структуры с помощью указателя;

Операция “.” называется прямым селектором компонента структуры; операция “->” называется косвенным селектором компонента (или указателем) структуры

 

К структурным объектам часто обращаются c помощью указателей, используя операцию ->.

пример: Прочитать из строки в файле все элементы структуры и вывести их в другой файл по полям.

 

#include <stdio>

struct address

{ char state[21];

char town[21]; // город

char street[31]; // улица

char name[41];

int number; // номер дома

};

 

void Out_Addr(address p,char *file_name)

{ FILE *file1;

file1=fopen(file_name,"w");

fprintf(file1,"%s\n%i\n%s\n%s\n%c%c\n",

p.name,p.number,p.street,p.town,p.state[0],p.state[1] );

fclose(file1);

}

 

 

void print_Addr(address p)

{ printf("%s\n%i\n%s\n%s\n%c%c\n",

 

p.name,p.number,p.street,p.town,p.state[0],p.state[1] );

}

//____

address *inp_Addr(char *file_name)

{FILE *file1;

address p1,*p=&p1;

 

file1=fopen(file_name,"r");

if (!file1)

fprintf(stderr, "\nCannot open %s for input",file_name);

 

else

{

fgets(p->name,40,file1);

fscanf(file1,"%i",&p->number);

fgets(p->street,30,file1);

fgets(p->town, 20,file1);

fgets(p->state,20,file1);}

 

fclose(file1);

print_Addr(*p);

return p;

}

 

void main(void)

{address s;

 

s=*inp_Addr("adr.txt");

Out_Addr(s,"adr_out.txt");

 

getchar();

}

 

исходный файл

Михайлов Степан Иванович 1 29ул. Политехническая 1Петербург Россия

 

результат

Михайлов Степан Иванович

ул. Политехническая

Петербург

Ро

Исходный файл

123456789_123456789_123456789_123456789 888y23456789_123456789_123456789g23456789_123456789c23456789_

результат

123456789_123456789_123456789_123456789

y23456789_123456789_123456789

g23456789_123456789

c2

 

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

 

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

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

Размер объекта структурного типа не обязательно равен сумме размеров всех его членов. Это происходит по той причине, что на многих машинах требуется размещать объекты определенных типов, только выравнивая их по некоторой зависящей от системы адресации границе (или просто потому, что работа при таком выравнивании будет более эффективной ). Типичный пример – это выравнивание целого по условной границе. В результате выравнивания могут появиться "дырки" в структуре.

 

Доступ к компонентам структур и объединений выполняется операторами выбора . и ->. Предположим, что объект имеет тип структуры S, а sptr это указатель на S. Тогда, если m это идентификатор типа M, объявленного в S, то выражения s.m и sptr->m имеют тип M и представляют объект m - компонент


2015-11-12 160 Обсуждений (0)
Операции и доступ к компоненту структуры 0.00 из 5.00 0 оценок









Обсуждение в статье: Операции и доступ к компоненту структуры

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (160)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)