Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры прога 2.docx
Скачиваний:
1
Добавлен:
18.09.2019
Размер:
83.31 Кб
Скачать

36.2,Динамичное распределение памяти.

Функции malloc и free

void free(void p)

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

Библиотека stdlib.h содержит ещё 2 функции для динам выделения памяти: calloc, realloc.

calloc – динимически выделяет память под массив

void *calloc(size_h memb, size_t size)

memb – число элементов массива

size – размер отдельного элемента

Возвращает либо NULL, либо указатель на начало выделеного участка памяти.

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

void *realloc(void *ptr, size_t size)

size – новый размер

ПР: #include<stdio.h>

#include<stdlib.h>

main()

{ int *p,t;

p = (int )malloc(40*sizeof(int));

if(!p){printf(“Нехватает памяти\n”);

exit(1);}

for(t=0;t<40;t++) *(p+t)=t;

- - -

for(t=0;t<40;t++);

printf(“%d\n”,*(p+t));

free(p);

}

37,1,Структуры. Операции над структурами

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

1.struct [имя типа структуры]{список элем структуры}[описатель [,описатель]]…;

2.struct имя типа структуры описатель[,описатель]…;

Объявление структуры задаёт имена переменных структуры и последовательность переменных величин, называемых элементами структуры( членами структуры или полями структуры).Причем каждое поле может иметь свой тип.

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

В формате 2 используется имя типа структуры, которое уже было определено где-то раньше в программе.

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

Описатель именует переменную типа struct и может быть обычной перем, указателем, массивом или ф-цией.

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

struct student {char name[30];

int kurs;

char group [8];}

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

struct a{char c;int b;} l; - 4 байта

Задание шаблона и объявление переменной можно производить одновременно.

Доступ к элементу структуры осуществляется с помощью операции точка: имя_структуры . имя_переменной

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

struct pt{int x; int y;};

struct a{struct pt,p1; struct p1,p2;}

Ссылка на поле вложенной структуры формируется из имени структуры переменной, имени структурного поля и имени поля вложенной структуры: screen.p1.x

Ограничение на вложение структур: структура не может вкладываться сама в себя.

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

Возможны следующие операции над структурами:

1.Копирование

2.Присваивание (передача структур в функции и возврат их в качестве результата также относится к операции присваивания)

3.Взятие адреса

4.Осущ доступа к переменной