Массивы указателей на функции. Пример


Как и обычные переменные, указатели на функции могут объединяться в массивы. Например, описать и инициализиро­вать массив указателей на функцию можно следующим обра­зом:

/* Описание 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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.