- •4.Элементы языка Си. Символы, лексемы, знаки операций.
- •1.Символы языка
- •2.Лексемы
- •5.Элементы языка Си. Константы, идентификаторы, ключевые слова, комментарии.
- •6.Типы данных.
- •7.1,Объявление переменных. Массивы.
- •7.2,Объявление переменных. Массивы.
- •9.1,Операции и выражения. Арифметические операции
- •11. Логические операции и операции отношения. Операции присваивания
- •12.Условное выражение. Операция Sizeof. Операции приведения типов type.
- •13.1,Преобразование типов в выражения. Правила приведения типов.
- •13.2,Преобразование типов в выражения. Правила приведения типов.
- •14.1, Управление вычислительными процессами. Конструкции if-else, else-if.
- •14.2, Управление вычислительными процессами. Конструкции if-else, else-if.
- •15.Переключатель
- •16. Операторы цикла.
- •17.1.Инструкции break, continue. Инструкция goto и метки. Пустой оператор
- •17.2.Инструкции break, continue. Инструкция goto и метки. Пустой оператор
- •Пустой оператор
- •18.1.Классы памяти.
- •18.2.Классы памяти.
- •19.1. Функции. Определение ф-ций.
- •Определение ф-ции
- •19.2. Функции. Определение ф-ций.
- •21. Структура программы на языке Си
- •22. Директивы #define и # undef.
- •24,Директивы препроцессора. Препроцессорные операции.
- •Препроцессорные операции
- •25.1, Указатели.Операции &,*.
- •25.2, Указатели.Операции &,*.
- •26. Указатель на неопределенный тип.
- •27.1,Выражения и операции с указателями. Присваивание указателей
- •Сравнение указателей
- •27.2,Выражения и операции с указателями. Применение арифметических операций к указателям
- •29. Массивы и указатели.
- •30.Операции с указателями на массив. Адресная арифметика.
- •32.Массивы указателей. Указатели на указатели.
- •33.Массивы указателей на строки.
- •34.1,Передача параметров из операционной среды.
- •34.2,Передача параметров из операционной среды.
- •36.1,Динамичное распределение памяти.
- •36.2,Динамичное распределение памяти.
- •37,1,Структуры. Операции над структурами
- •37,2,Структуры. Операции над структурами
- •38.Массив структур. Правило выравнивания структурных переменных в памяти
- •39.1,Переименование типов. Средство typedef.
- •39.2,Переименование типов. Средство typedef.
- •40.Поля битов.
- •41.1,Объединения
- •41.2,Объединения
- •42.Ввод, вывод потока.
- •43.Доступ к файлам через поток ввода/вывода.Открытие потока.Закрытие потока.
- •44.1,Доступ к файлам через поток ввода/вывода.Функция потокового ввода вывода.
- •44.2,Доступ к файлам через поток ввода/вывода.Функция потокового ввода вывода.
- •45,Последовательный и прямой доступ в поток.
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.Осущ доступа к переменной