Функции работы с указателями и памятью
(заголовочные файлы alloc.h, stdlib.h, mem.h; в Visual Studio – memory.h, stdlib.h)
void* malloc(unsigned s) – выделение памяти s байт.
void* calloc(unsigned n, unsigned m) – выделение n элементов по m байт.
void* realloc(void* ptr, unsigned ns) – перевыделение памяти.
void free(void* ptr) – освобождение памяти.
int memcmp(void* s1, void* s2, unsigned n) – сравнивает две области памяти.
void* memcpy(const void* dest, const void* src, unsigned n) – копирование области памяти n байт из src в dest.
void* memset(void *ptr, int c, unsigned n) – запись числа c в память начиная с ptr.
Пример организации простейшего массива указателей на произвольные объекты.
#include <stdio.h>
#include <conio.h>
#include <memory.h>
#include <stdlib.h>
struct voidarray
{
void **data;
int size, topsize, step;
};
int init(voidarray*array, int initsize)
{
array->topsize = array->step = initsize;
array->size=0;
array->data=(void**)malloc(initsize*sizeof(void*));
return array->data!=NULL;
}
int add(voidarray*array, void* element)
{
array->size++;
if (array->size>array->topsize)
{
void **data2=(void**)malloc((array->topsize+array->step)*sizeof(void*));
if (data2==NULL) return -1;
memcpy(data2,array->data,array->topsize*sizeof(void*));
array->topsize+=array->step;
free(array->data);
array->data=data2;
}
array->data[array->size-1] = element;
return 0;
}
void dispose(voidarray*array)
{
free(array->data);
array->size = array->topsize = 0;
}
void* getat(voidarray*array,int n) {return n<array->size?array->data[n]:0;}
int main()
{
voidarray array;
init(&array,10);
for(int i=0;i<100;i++)
{add(&array,new int(i));}
for(int i=0;i<100;i++)
printf("%d",*(int*)getat(&array,i));
dispose(&array);
_getch();
}
Строки.
Строкой является массив данных типа char. Используется строка с завершающим нулём, то есть признаком конца строки является символ с кодом «0».
Строки могут инициализироваться текстом, заключенным в двойные кавычки: строковой константой, – которая имеет тип const char*.
char t[] = “Hello, World”;
Функции работы со строками (библиотека string.h).
char *strcat(char *dest, char *src) – в dest помещается результат объединения dest и src, возвращает ссылку на dest (!!! в dest должно быть достаточно места для помещения результата)
char *strchr(char *str, int c) – поиск символа «c» в str, результат – ссылка на первый найденный символ или NULL, если символ не найден;
int strcmp(char *str1, char *str2) – посимвольное сравнение строк, возвращает -1, если str1<str2, +1 если str1>str2 и 0 если str1==str2;
char* strcpy(char *dest, char *src) – копирует src в dest, возвращает указатель на dest;
unsigned strlen(char *str)
char* strset(char *str, int c) , возвращает s.
char *strstr(const char *str, const char *substr)
Определены модификации некоторых функций, принимающие в качестве дополнительного аргумента длину строки. Данные функции начинаются с strn вместо str. Это функции strncat, strncmp, strncpy, strnset.
Пример:
char* strncat(char *dest, char *src, unsigned n) – то же, что strcat, но используются n символов src.
Дата добавления: 2015-11-04; просмотров: 587;