7.9.4. Массивы указателей на функции
7.9.4. Массивы указателей на функции
Можно объявить массив указателей на функции. Например:
int (*testCases[10])();
testCases – это массив из десяти элементов, каждый из которых является указателем на функцию, возвращающую значение типа int и не имеющую параметров.
Подобные объявления трудно читать, поскольку не сразу видно, с какой частью ассоциируется тип функции.
В этом случае помогает использование имен, определенных с помощью директивы typedef:
// typedef делает объявление более понятным
typedef int (*PFV)(); // typedef для указателя на функцию
PFV testCases[10];
Данное объявление эквивалентно предыдущему.
Вызов функций, адресуемых элементами массива testCases, выглядит следующим образом:
const int size = 10;
PFV testCases[size];
int testResults[size];
void runtests() {
for ( int i = 0; i
Массив указателей на функции может быть инициализирован списком, каждый элемент
которого является функцией. Например:
int lexicoCompare( const string , const string );
int sizeCompare( const string , const string );
typedef int ( *PFI2S )( const string , const string );
PFI2S compareFuncs[2] =
{
lexicoCompare,
sizeCompare
};
Можно объявить и указатель на compareFuncs, его типом будет “указатель на массив указателей на функции”:
PFI2S (*pfCompare)[2] = compareFuncs;
Это объявление раскладывается на составные части следующим образом:
(*pfCompare)
Оператор разыменования говорит, что pfCompare является указателем. [2] сообщает о количестве элементов массива:
(*pfCompare) [2]
PFI2S – имя, определенное с помощью директивы typedef, называет тип элементов. Это “указатель на функцию, возвращающую int и имеющую два параметра типа const string ”. Тип элемента массива тот же, что и выражения lexicoCompare.
Такой тип имеет и первый элемент массива compareFuncs, который может быть получен с помощью любого из выражений:
compareFunc[ 0 ];
(*pfCompare)[ 0 ];
Чтобы вызвать функцию lexicoCompare через pfCompare, нужно написать одну из следующих инструкций:
// эквивалентные вызовы
pfCompare [ 0 ]( string1, string2 ); // сокращенная форма
((*pfCompare)[ 0 ])( string1, string2 ); // явная форма
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Разрешение системных указателей
Разрешение системных указателей Системный указатель считается разрешенным, если содержит прямой адрес системного объекта. Указатель, содержащий символический адрес, называется неразрешенным. Символический адрес используется для поиска объекта в библиотеке и состоит
Выбор указателей мыши
Выбор указателей мыши Еще одной отличительной особенностью интерфейса Windows Vista стал набор изящных видов указателей мыши. Как и в предыдущих версиях Windows, у вас сохранилась возможность изменять вид указателя при различных состояниях. В окне Персонализация щелкните
7.7. Изменение указателей мыши
7.7. Изменение указателей мыши Возможность настройки указателей мыши существовала и в самых ранних версиях операционной системы Windows, поэтому разработчики Windows 7 решили не изобретать велосипед и использовать уже отлаженный механизм. При этом они взяли его в том виде, в
Основы указателей
Основы указателей СОМ, подобно DCE (Distributed Computing Environment – среда распределенных вычислений), ведет свое начало от языка программирования С. Хотя лишь немногие разработчики используют С для создания или использования компонентов СОМ, именно от С СОМ унаследовала синтаксис
Проблема обобщенных указателей
Проблема обобщенных указателей Что такое обобщенные указатели и почему они полезны Представим себе некий объект, который имеет перегруженную операцию operator->(). Мы можем его представить себе как некий обобщенный указатель, который не является указателем в полном смысле
R.4.6 Преобразования указателей
R.4.6 Преобразования указателей Всюду, где указатели (§R.8.2.1) присваиваются, инициализируются, сравниваются или используются иным образом, могут происходить следующие преобразования:Константное выражение (§R.5.19), которое сводится к нулю, преобразуется в указатель, обычно
Реализация паттерна «Стратегия» посредством указателей на функции
Реализация паттерна «Стратегия» посредством указателей на функции Идиома NVI – это интересная альтернатива открытым виртуальным функциям, но с точки зрения проектирования она дает не слишком много. В конце концов, мы по-прежнему используем виртуальные функции для
Совет 7. При использовании контейнеров указателей, для которых вызывался оператор new, не забудьте вызвать delete для указателей перед уничтожением контейнера
Совет 7. При использовании контейнеров указателей, для которых вызывался оператор new, не забудьте вызвать delete для указателей перед уничтожением контейнера Контейнеры STL отличаются умом и сообразительностью. Они поддерживают итераторы для перебора как в прямом, так и в
Описание указателей
Описание указателей Мы знаем, как описывать переменные типа int и других типов. Но как описать переменную типа "указатель"? На первый взгляд это можно сделать так: pointer ptr; /* неправильный способ описания указателя */Почему нельзя использовать такую запись? Потому
ФУНКЦИИ, МАССИВЫ И УКАЗАТЕЛИ
ФУНКЦИИ, МАССИВЫ И УКАЗАТЕЛИ Массивы можно использовать в программе двояко. Во-первых, их можно описать в теле функции. Во-вторых, они могут быть аргументами функции. Вес, что было сказано в этой главе о массивах, относится к первому их применению; теперь рассмотрим
Функции и многомерные массивы
Функции и многомерные массивы Предположим, что вы хотите иметь функцию, работающую с двумерным массивом, причем со всем целиком, а не с частями. Как вы запишите определения функции и ее описания? Подойдем к этому более конкретно и скажем, что нам нужна функция,
Адаптеры указателей на функции (Adaptors for pointers to functions)
Адаптеры указателей на функции (Adaptors for pointers to functions) Чтобы позволить указателям на (унарные и бинарные) функции работать с функциональными адаптерами, библиотека обеспечивает следующее:template ‹class Arg, class Result›class pointer_to_unary_function: public unary_function‹Arg, Result› {protected: Result
6.7 Преобразования Указателей
6.7 Преобразования Указателей Везде, где указатели присваиваются, инициализируются, сравниваются и т.д. могут выполняться следующие преобразовния.Константа 0 может преобразовываться в указатель, и грантируется, что это значение породит указатель, отлиный от указателя на
Типы указателей
Типы указателей PBoolean Тип указателя на boolean PByte Тип указателя на byte PShortint Тип указателя на shortint PChar Тип указателя на char PSmallint Тип указателя на smallint PWord Тип указателя на word PPointer Тип указателя на pointer PInteger Тип указателя на
Настройка указателей мыши
Настройка указателей мыши Для изменения формы указателей мыши щелкните кнопкой мыши в окне Персонализация на ссылке Указатели мыши. При этом откроется вкладка Указатели диалогового окна Свойства: Мышь (рис. 2.25). Рис. 2.25. Окно настройки указателей мышиВы можете выбрать