Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ekzamenYazyki_programmirovania.docx
Скачиваний:
15
Добавлен:
25.09.2019
Размер:
794.36 Кб
Скачать

25 Структуры. Понятие. Объявление. Определение. Обращение к полям структуры.

Структурасоставной объект, в который входят элементы нескольких типов.

Объявление структуры:

struct <имя_структуры>{<определение_элементов>};

Пример

struct date

{

int year;

char month;

char day;

};

Обращение к элементам структуры производится через точку. Например:

str.name="Иванов";

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

Пример:

#include ...

struct point

{

int x,y;

};

double dist(struct point A, struct point B)

{

dobule d;

d = sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));

return d;

}

void main()

{

struct point A,B;

cin >> A.x >> A.y;

cin >> B.x >> B.y;

cout << "AB=" << dist (A,B);

}

26 Сложные структуры. Структуры, содержащие массивы

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

Например:

struct rectangle

{

struct point topleft;

struct point bottomright;

} mybox;

mybox.topleft.x=10;

mybox.topleft.y=10;

mybox.bottomright.x=100;

mybox.bottomright.y=120;

27 Массивы структур. Инициализация структур.

После объявление структуры ставится знак = и в фигурных скобках записывается список значений, разделённый запятыми

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

Как и в других массивах переменных, в массивах структур индексирование начинается с 0.

Инициализация структуры в языке си ( c ) происходит так же, как и при инициализации массива. Вот пример инициализации структуры:

struct klass a = {"Sergey", 'B', 4.5 };

Т.е. мы создаем переменную типа struct klass и присваиваем всем трем полям, которые у нас определенны в структуре, значения. Порядок очень важен при инициализации структуры, так как компьютер сам не может отсортировывать данные. Если какое-либо поле у вас будет не заполненным, то оно автоматом заполнится 0 - для целочисленных типов; NULL - для указателей; \0 (ноль-терминатор) - для строковых типов.

struct student

{

char name[25];

int score;

group[8];

} stud1 = {"Ivanov I.I.", 34, "VIS-21"};

28 Структуры и указатели. Указатели, как поля структур. Создание указателей на структуры. Указатели и массивы структур. Передача структур в функции.

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

struct data

{

int *value;

int *date;

} first;

Инициализирование можно выполнить, присвоив полям структуры адреса подходящих переменных.Пусть есть две переменных:

int a,b;

first.value = &a;

first.data = &b;

Создание указателей на структуры. указатель на структуру объявляется с помощью звездочки *, которую помещают перед именем переменной структуры. Например, для ранее определенной структуры addr следующее выражение объявляет addr_pointer указателем на данные этого типа (то есть на данные типа addr): struct addr *addr_pointer; Указатели на структуры используются главным образом в двух случаях: когда структура передается функции с помощью вызова по ссылке, и когда создаются связанные друг с другом списки и другие структуры с динамическими данными, работающие на основе динамического размещения. В этой главе рассматривается первый случай. У такого способа, как передача любых структур функциям, имеется один большой недостаток: при выполнении вызова функции, чтобы поместить структуру в стек, необходимы существенные ресурсы.Надо передавать не саму структуру, а указатель на нее. Когда функции передается указатель на структуру, то в стек попадает только адрес структуры. Указатели и массивы структур Чтобы объявить массив структур, вначале необходимо определить структуру (то есть определить агрегатный тип данных), а затем объявить переменную массива этого же типа. Например, чтобы объявить 100-элементный массив структур типа addr, который был определен ранее, напишите следующее: struct addr addr_list[100];Это выражение создаст 100 наборов переменных, каждый из которых организован так, как определено в структуре addr. Передача структур в функции- При передаче функции члена структуры передается его значение, притом не играет роли то, что значение берется из члена структуры. Проанализируйте, например, следующую структуру:

struct fred

{

char x;

int y;

float z;

char s[10];

} mike;

func(mike.x); /* передается символьное значение x */

для передачи целой структуры используется обычный способ вызова по значению

Создание указателей на структуры

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

struct student st;

struct student *ptr;

ptr = &st;

ptr — указатель на st

*ptr — сама структура st

Обращение к полям: (*ptr).score = 1000;

Другой способ доступа к полям, используя указатель — стрелка. Так называемое косвенное обращение к элементам структуры.

Вышеуказанный пример будет:

ptr->score = 1000;

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