Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
I_semestr.doc
Скачиваний:
6
Добавлен:
23.09.2019
Размер:
356.35 Кб
Скачать

Глава 10. Структуры языка с

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

Необходимость в структурах возникает тогда, когда объект характеризуется величинами разного типа. Например, товар на складе. Например, у него имеется название, цена, остаток.

10.1. Описание структур

1. Ключевое слово

struct

{

char name[21];

float prise;

int kolvo;

}

tovar;

Описана структурированная переменная tovar, которой будет выделено 21+4+4=29 байт.

2.struct _Goods

{

char name[21];

float prise;

int kolvo;

};

struct _Goods a;//описание переменной а

Описан пользовательский структурированный тип Goods. Переменные не описаны, память не выделялась.

3. Объединяет первый и второй

struct _Goods

{

char name[21];

float prise;

int kolvo;

}

good1,good2;

Тут описан тип и две переменные этого типа. Причем это не отменяет возможности описывать переменные другим способом.

4.

typedef char string[41];

string a,b,c;

typedef struct Googs

{

char name[21];

float prise;

int kolvo;

};

...

Goods x,y,z;

5.Только в С++.

В С++ разрешено вторым способом описанный тип при создании переменных не уточнять ключевым словом struct.

10.2. Трактовка имени структуры

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

good1=good2;

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

10.2.1. Доступ к полям структуры

Для доступа к полям структуры используется операция точка. . – селектор.

good1.prise //имя структурированной переменной и уточнение с помощью селектора. Имя переменной, имя поля и селектор.

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

На структуру можно описать указатели.

Goods *p;

p=&good1;

p->prise=8;

Для указателя на структуру используется селектор стрелочка.

10.3. Инициализация структур

Структуры могут быть проинициализированы подобно массивам.

Goods a={“Televizor”,15999.99,10}

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

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

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

void ToDecart(double a, double R, double *x, double *y);

{

*x=R*cos(a);

*y=R*sin(a);

}

double a,b;

ToDecart(0,3,&a,&b);

С помощью структур это можно реализовать следующим образом:

struct Polar

{

double a,b;

};

struct Decart

{

double x,y;

};

Decart ToDecart(Polar(p))

{

Decard d;

d.x=p.r*cos(p.a);

d.y=p.r*sin(p.a);

return d;

}

Polar c={3,0}

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]