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

40. Функции работы с памятью. Memcmp - сравнивает две области памяти

#include <string.h>

int memcmp(const char *s1, const char *s2, size_t n);

Эта функция сpавнивает не более чем n знаков объектов, на котоpые yказывают s1 и s2.

Эта функция возвращает целое большее, pавное или меньшее нyля, если yказываемый s1 объект больше, pавен или меньше объекта, yказываемого s2.

Стандарт ANSI требует наличия функции memcmp.

memcmp не требует никаких процедур ОС.

Функция memcmp сравнивает первые n символов своих аргументов. Функция возвращает целое число, меньшее, равное или большее 0, если s1, соответственно, лексикографически меньше, равно или больше s2.

memcpy - копирует области памяти

#include <string.h>

void* memcpy(void *out, const void *in, size_t n);

Эта функция копирует n байт из области памяти, начинающейся с in, в область памяти, начинающейся с out.

Если эти области перекрываются, то результат не определен.

memcpy возвращает указатель на первый байт области, начинающейся с out.

Стандарт ANSI требует наличия функции memcpy.

memcpy не требует никаких процедур ОС. \

Функция memcpy копирует n символов из области памяти s2 в s1. Результат функции - s1.

memory: memccpy, memchr, memcmp, memcpy, memset - функции для работы с памятью

ОПИСАНИЕ Данные функции максимально эффективно манипулируют с областями памяти (массивами символов, размер которых определяется счетчиком, а не нулевым байтом в конце). Функции не выполняют проверку переполнения массива-приемника.

Функция memccpy копирует символы из области памяти s2 в s1 до тех пор, пока либо не будет скопировано первое вхождение символа c, либо не будет скопировано n символов. Функция возвращает указатель на следующий после c элемент массива s1 в случае, если c был найден, или пустой указатель (NULL), если c не был найден среди первых n символов s2.

Функция memchr возвращает указатель на первое вхождение символа c в n первых символов области памяти s или пустой указатель, если символ c не встретился.

Функция memcmp сравнивает первые n символов своих аргументов. Функция возвращает целое число, меньшее, равное или большее 0, если s1, соответственно, лексикографически меньше, равно или больше s2.

Функция memcpy копирует n символов из области памяти s2 в s1. Результат функции - s1.

Функция memset заполняет первые n байт области памяти s символами c. Результат функции - s.

Для удобства пользователей все эти функции описаны во включаемом файле <memory.h>.

ОГРАНИЧЕНИЯ Функция memcmp использует аппаратное сравнение символов. Поэтому результаты сравнения цепочек, содержащих символы со старшим битом, равным единице, машинно-зависимы. В данной системе подобные символы трактуются как отрицательные числа.

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

41. Структуры

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

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

struct [ имя_типа ] {

тип_1 элемент_1;

тип_2 элемент_2;

...

тип_n элемент_n;

} [ список_описателей ];

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

Если отсутствует имя типа, должен быть указан список описателей переменных, указателей или массивов. В этом случае описание структуры служит определением элементов списка:

struct {

char fio[30];

int date, code;

float salary;

}stuff[100], *ps;/*определение массива структур и указателя на структуру */

Если список отсутствует, описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами, например:

struct Worker{//описание нового типа Worker

char fio[30];

int date, code;

float salary;

};//описание заканчивается точкой с запятой

Worker stuff[100], *ps;/* определение массива типа Worker и указателя на тип Worker */

Для инициализации структуры значения ее элементов перечисляют в фигурных скобках в порядке их описания:

struct{

char fio[30];

int date, code;

float salary;

}worker = {"Страусенко", 31, 215, 3400.55};

Для переменных одного и того же структурного типа определена операцияприсваивания, при этом происходит поэлементное копирование.

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

Доступ к полям структуры выполняется с помощью операций выбора . (точка) при обращении к полю через имя структуры и -> при обращении через указатель, например:

Worker worker, stuff[100], *ps;

...

worker.fio = "Страусенко";

stuff[8].code = 215;

ps->salary = 0.12;

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