- •1.Операции с адресами
- •2.Переменная указатель
- •3.Операции над переменными указателями
- •4.Указатели и массивы
- •5.Описание функции
- •11.Варианты описания и использования функций. Аргументом функции является двухмерный массив (матрица).
- •12.Варианты описания и использования функций. Аргументом функции является другая функция.
- •Void f1(тип (*агтс)(тип1б тип2б…)б…)
- •13.Динамическая память «куча». Функции выделения и освобождения памяти.
- •14.Символьные строки. Определение, отличие от последовательности символов.
- •15.Объявления строковых данных (перечислить способы). Задание строки в форме строковой константы.
- •21.Основные функции для работы со строками.
- •22.Обязательная последовательность действий при работе с файлами. Описание файловой переменной.
- •23.Открытие файла.
- •24.Чтение данных из файла
- •25.Запись данных в файл
- •26.Закрытие файла. Необходимость выполнения этого действия.
- •27.Дополнительные функции работы с файлом.
- •28.Локальные и глобальные переменные.
11.Варианты описания и использования функций. Аргументом функции является двухмерный массив (матрица).
Существует 3 способа передачи:
Массив с фиксированным количеством строк и столбцов
void func(float c[5][10])
В теле функции к элементам матрицы обращаются привычным образом a[i][j]
При вызове функции передаётся имя массива.
Массив передаётся с неопределённым количеством строк и фиксированным количеством столбцов.
В этом случае нужно обязательно передавать еще один параметр – количество строк.
Внутри функции к элементам матрицы обращаются обычным образом a[i][j]
При вызове передаётся имя массива.
Массив передаётся как указатель на начало массива.
В этом случае нужно передавать количество строк и стобцов.
void func(float *ptc, int m, int n)
К элементам матрицы обращаться по формуле *(ptc+i*n+j)
При вызове передаётся адрес первого элемента массива.
Способ позволяет обрабатывать матрицы произвольного размера.
12.Варианты описания и использования функций. Аргументом функции является другая функция.
Void f1(тип (*агтс)(тип1б тип2б…)б…)
{ func(x,g,z…); }
При вызове функции в качестве аргумента записывается имя конкретной функции: f1(f2,…);
13.Динамическая память «куча». Функции выделения и освобождения памяти.
Динамическая память – это способ выделения оперативной памяти компьютера объектом программы, при котором память выделяется в момент выполнения программы. При этом переменные, которым выделена динамическая память, размещаются в «куче».
Выделенный участок памяти становится недоступным при последующих выделениях.
В случае, если динамическая переменная уже не нужна, то необходимо освободить занимаемый ею блок памяти. Некорректное освобождение памяти приводит к «утечкам».
Язык Си предлагает следующие функции для распределения памяти.
Void *malloc (size_t size);
Данная функция имеет один аргумент, который указывает количество байт выделяемого участка(блока) памяти.
Функция возвращает указатель на начало выделенного блока (первый байт).
Void *calloc (size_t num, size_t size);
Имеет два параметра Num и Size.
Выделяется блок памяти размера Num*Size байт.
Void *realloc(void *block, size_t size);
Позволяет изменить размер уже выделенного блока памяти.
Первый аргумент void *block – это указатель на начало блока памяти, который уже выделен.
Size – новый размер блока в байтах.
Если в куче отсутствует блок заданного размера, то функции возвращают NULL.
Void *free(void *block);
Используется для освобождения блока памяти, на который указывает указатель *block .
Количество функций *malloc и *calloc в сумме должно быть равно количеству функций *free.
В язык С++ добавлено два оператора: new (выделение памяти) и delete (освобождение памяти).
New имеет два параметра: new тип и new тип [N]
Delete имеет два параметра: delete указатель и delete[] указатель
14.Символьные строки. Определение, отличие от последовательности символов.
Для описания символьных строк в Си не существует специального типа.
Поскольку строка – это последовательность символов, то она описывается как массив элементов типа char.
При этом последний элемент массива должен хранить нуль-символ ‘\0’. Только тогда массив символов станет строкой.
