КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Строки
Функции работы с указателями и памятью Указатели в качестве параметров функций В списке формальных параметров функций указатели могут указываться как с использованием символа *, так и с использованием квадратных скобок. Данные определения равнозначны. void f(char *x, double []y) {…} Для передачи многомерных массивов удобно использовать определение типа (служебное слово typedef). Пример. typedef int myarray[5][5]; void f(myarray t) { … } void main() { myarray x; … f(x); } Для передачи в функцию константного указателя используется служебное слово const. Данные, на которые указывают такие указатели не могут быть переопределены, а также нельзя освободить память, занимаемую ими. void f2(const char *t) { t[0] = ‘x’; /недопустимо free(t); //недопустимо, но можно выполнить free((char *)t) } (заголовочные файлы 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.
Дата добавления: 2014-01-05; Просмотров: 332; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |