Массивы указателей на функции. Пример
Как и обычные переменные, указатели на функции могут объединяться в массивы. Например, описать и инициализировать массив указателей на функцию можно следующим образом:
/* Описание nрототипов функций, тoчки входа на котoрые будут элементами
массивы укaзатeлей на функциu */
int cmp_year( const void *, const void*);
int сmр_price(const void *, const void*);
int сmp_title(const void *, const void*);
int сmp_namе(const void *, const void*);
int сmр _totally(const void *, const void*);
………………………………………………….
int(* fcmp[5]) (const void *, const void*) =
{сmp_namе, cmp_title, cm_yeaг, cmp_price, cm_totally };
Доступ к элементам массива fcmp с целью аппликаций функций, адресуемых указателями выполняется как к обычным элементам массива.
Пример
int index = 0;
………………………………
fcmp[index](ptr1, ptr2);
Вопросы для самоконтроля
- Перечислите используемые в Турбо С модели памяти!
- Что означает модификатор типа near?
- Чем отличаются модификаторы типов far и huge?
- В чем состоит проблема «перепрыгивания сегментов»?
- Как выполнить загрузку регистров ds, es, ss, cs при работе с соответствующими типами указателей?
- Как «читаются» декларации следующего вида:
char * (*p)(double,…);
char (*p[5])(char *, int);
char * p(long, char); ?
Лекция 10. Символьные массивы и функции для работы с литерами и строками
Любая строка символов, заключённая в двойные кавычки называется строковым литералом и представлена в памяти программы как массив элементов типа char, в конце которого помещён символ ‘\0’. Это даёт возможность использовать строковые литералы как аргументы в библиотечных функциях работы со строками. Значением литерала является его адрес размещения в памяти.
Инициализация строковых массивов
1) char array[10] = {‘A’,’B’,’C’};
Выделяется память на 10 элементов. Первые 3 инициализируются значениями из списка {…}, остальные элементы значением ‘\0’ если массив внешний или к нему добавлено static, если автоматический, то остальное мусор.
2) char array[] = {‘A’,’B’,’C’};
Будет создан массив из 3-х элементов и инициализирован.
3) char strings[3][80]=
{“Первая строка”,
“Вторая строка”,
“Третья строка”};
Здесь каждая из трёх строк содержит по 80 байт и заполняется посимвольно символами из литералов в т.ч. каждая строка заканчивается символом ‘\0’. Заполнение остатков строк как в предыдущем случае.
4) Можно было бы и не писать первый индекс, т.е. указать char strings[][80]={…}
Пример
string = “Слово” ;
Если бы был объявлен массив:
char string[10]; ,
то string = “Слово”; NB! Нельзя выполнить.
Операции над массивами
Основные положения
Для массовых операций необходимо использовать библиотечные функции пересылок строк.
Пример
(Работа с символьными массивами с использованием ссылок )
strcpy (s,t) /* копирование из t в s */
char s, t; /*см. */
{
while ((*s++=*t++)! = ‘\0’);
}
В вызове функции strcpy() аргументы должны быть либо массивами, либо конкретно определёнными указателями. Так, в последнем случае s должно ссылаться на свободное место в памяти для размещения пересылаемых данных, а t должно ссылаться на массив, содержащий исходную строку, заканчивающийся символом ‘\0’, либо должна быть инициализирована ссылкой на литерал.
Пример
char s[20], *t = “Слово”;
…
strcpy(s,t)
Дата добавления: 2016-05-26; просмотров: 1841;