Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по функциям С++.doc
Скачиваний:
168
Добавлен:
02.05.2014
Размер:
3.57 Mб
Скачать

Lsearch

-----------------------------------------------------------------

НазначениеВыполняет линейный поиск.

Синтаксис #include<stdlib.h>

void *lsearch(const void *key, void *base,

size_t *pnelem, size_t width, int (*fcmp)

(const void *, const void *));

Прототип в stdlib.h

lsearch выполняет поиск в таблице.Так как она

использует линейный поиск, то элементы таблицы

не нуждаются в сортировке перед вызовом

lsearch. Если элемент, на который указывает

key, не найден в таблице, то lsearch добавляет

его в таблицу.

- base указывает на базис (0-ой элемент)

поисковой таблицы.

- pnelem указывает на целое, хранящее количест-

во элементов в таблице.

- width содержит число байт в каждом элементе.

- key указывает на искомый элемент ("поисковый

ключ").

Аргумент fcmp указывает на написанную пользова-

телем функцию сравнения. Эта функция сравнивает

два элемента и возвращает результат сравнения.

При поиске в таблице lsearch производит многок-

ратное обращение к функции, адрес которой пере-

дается в fcmp.

При каждом вызове функции сравнения, lsearch

передает ей два аргумента: key, указывающий на

элемент поиска и elem, указывающий на элемент

таблицы, с которым производится сравнение.

fcmp - произвольна в интерпретации совпадения

поискового ключа и элементов таблицы.

Возвращаемоеlsearch возвращает адрес первого элемента

значениетаблицы, удовлетворяющего ключу поиска.

В lsearch

-----------------

Если ключ поиска fcmp возвращает

не равен *elem целое != 0

равен *elem 0

Совместимость lsearch доступна в UNIX - системах.

Смотри такжеbsearch, lfind, qsort

Пример

#include<stdlib.h>

#include<stdio.h>

#include<string.h> /* Для описания strcmp */

char *colors [10] = {"красный","голубой",

"зеленый"};

int ncolors = 3;

/* Возвращает 1 если есть в таблице, 0 если нет

и был добавлен. */

/* Предполагает достаточное пространство для

добавления. */

int addelem (char *color)

{

int oldn = ncolors;

if ((char *) lsearch(color, colors, ncolors,

sizeof(colors[0]), strcmp)> &colors[2])

++ncolors;

return(ncolors == oldn);

}

main ()

{

if (addelem("пурпурный"))

printf("пурпурный уже есть в таблице цветов");

else

printf("Пурпурный добавлен в таблицу. Теперь в"

" ней %d цвета\n" ncolors);

}

Вывод программы:

Пурпурный добавлен в таблицу. Теперь в ней 4

цвета

-----------------------------------------------------------------

lseek

-----------------------------------------------------------------

НазначениеПеремещает указатель файла.

Синтаксис#include<io.h>

long lseek(int handle, long offset,

int fromwhere)

Прототип в io.h

Oписание lseek устанавливает указатель файла, связанный

с handle, на новую позицию, которая на offset

байт отстоит от места в файле, заданного в

fromwhere. fromwhere должно быть одной из сле-

дующих величин: 0, 1 или 2, что представляется

тремя символическими константами (определенными

в io.h):

fromwhere Размещение в файле

--------- ------------------

SEEK_SET (0) начало файла

SEEK_CUR (1) текущее положение указателя

файла

SEEK_END (2) конец файла

Возвращаемоеlseek возвращает новое смещение указателя,

значениеизмеряемое числом байт от начала. При ошибке

lseek возвращает -1L и устанавливает еrrno в

одно из значений:

EBADF - неверный номер файла

EINVAL - неверный аргумент

На устройствах, недоступных для установки ука-

зателя (таких, как терминал и принтер), возвра-

щаемое значение не определено.

Переносимостьlseek доступнa на всех системах типа UNIX.

Смотри также filelenth, fseek, ftell, sopen, _write, write

-----------------------------------------------------------------

ltoa

-----------------------------------------------------------------

НазначениеПреобразует число типа long в строку.

Синтаксис char *ltoa(long value,char *string,int radix);

Прототип вstdlib.h

Замечанияltoa преобразует value в заканчивающуюся нулем

строку и заносит результат в string. Для ltoa

тип value - длинное целое.

radix определяет основание, используемое в

превращаемом value. Оно должно быть от 2 до 36

(включительно). Если value отрицательно и radix

=10, то первый символ строки - знак минуса (-).

Замечание: место, выделенное для string, должно

быть достаточно большим для того, чтобы помес-

тить возвращаемую строку, включая 0 в конце

(\0). ltoa может возвращать до 33 байт;

Возвращаемоеltoa возвращает указатель на string, ошибка не

значениевозвращается.

Смотри такжеitoa, ultoa

-----------------------------------------------------------------

malloc

-----------------------------------------------------------------

НазначениеРазмещает основную память.

Синтаксис #include<stdlib.h> или #include<alloc.h>

void *malloc(unsigned size);

Прототип в stdlib.h и alloc.h

Замечанияmalloc размещает блок из size байт в памяти

(куча памяти Си).

Куча доступна для динамического размещения пу-

тем создания блоков памяти различного размера.

Многие структуры данных, такие, как деревья и

списки, естественно, используют размещение па-

мяти в виде кучи.

Все пространство между концом сегмента данных и

вершиной программного стека в малых моделях па-

мяти доступно для использования, кроме 256 бай-

тов непосредственно перед вершиной стека. Эта

память используется для возможности увеличения

стека и, кроме того, небольшое количество памя-

ти используется для нужд MS-DOS.

В больших моделях памяти все пространство от

программного стека до конца физической памяти

является кучей.

Возвращаемоеmalloc возвращает указатель на заново размещен-

значениеный блок или NULL,если для размещаемого блока

недостаточно памяти. Если аргумент size равен

0, то malloc вернет NULL.

Переносимостьmalloc доступна на UNIX системах и совместима с

ANSI Cи.

Смотри также allocmem, calloc, coreleft, farcalloc,

farmalloc, free, realloc

Пример

#include<stdio.h>

#include<stdlib.h>

typedef struct {

/* .....*/

} OBJECT;

OBJECT *NewObject()

{

return ((OBJECT *) malloc(sizeof(OBJECT)));

}

void FreeObject(OBJECT *obj)

{

free(obj);

}

main()

{

OBJECT *obj;

obj = NewObject();

if (obj == NULL)

{

printf("Невозможно создать новый объект\n");

exit(1);

}

/*......*/

FreeObject(obj);

}

-----------------------------------------------------------------