русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Массивы указателей на функцию


Дата добавления: 2014-11-27; просмотров: 597; Нарушение авторских прав


В некоторых типах программ пользователь может выбирать некоторый вариант из списка возможных действий. Например, в системе подсчета может быть меню более с 20 вариантами. Когда выбор сделан, программа выполняет соответствующую функцию. Это может быть сделано двумя способами. Во первых, для этого можно использовать оператор switch, например

void menu(void)

{

char ch;

printf(“1. Проверка орфографии\n”);

printf(“2. Корректировка ошибок\n”);

printf(“3. Вывод ошибок на экран\n”);

printf(“Сделайте ваш выбор: “);

do {

ch = getche(); /* Чтение клавиатуры */

switch (ch) {

case ‘1’:

check_spelling();

break;

case ‘2’:

correct_errors();

break;

case ‘3’:

display_errors();

break;

}

} while (ch != ‘1’ && ch != ‘2’ && ch != ‘3’);

}

В приложениях, где требуется высокая производительность, лучше применять другой способ. Можно использовать массив указателей, содержащих адреса функций. Выбор, сделанный пользователем, декодируется и используется для индексации массива указателей, вызывая выполнение необходимой функции. Этот метод гораздо быстрее, чем метод использования оператора switch.

Для того, чтобы понять, как можно использовать массив указателей на функции для построения меню, преобразуем предыдущий пример. Если функции, выполняющие действия по проверке орфографии называются check_spelling(), correct_errors(), display_errors(), quit(), то следующий фрагмент программы корректно инициализирует массив указателей на функции:

void check_spelling (void), correct_errors (void), display_errors (void), quit (void);

int menu (void);

void (*options[ ]) (void) = {

check_spelling,

correct_errors,

display_errors,

quit

} ;

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



Хотя эта программа не выполняет никаких действий по проверке орфографии, она демонстрирует правильный способ выполнения функций с помощью указателей на функции. Следует обратить внимание, как функция menu() автоматически возвращает правильный индекс в массив указателя:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

void check_spelling (void), correct_errors (void), display_errors (void), quit (void);

int menu (void);

void (*options []) (void) = {

check_spelling,

correct_errors,

display_errors,

quit

} ;

int main(void)

{

int i;

i = menu () ; /* получение выбора пользователя *.

(*options [i]) ( ) ; /* выполнение */

return 0;

}

int menu (void)

{

char ch;

do {

printf(“1. Проверка орфографии\n”);

printf(“2. Корректировка ошибок\n”);

printf(“3. Вывод ошибок на экран\n”);

printf(“4. В ы х о д\n”);

printf(“Сделайте ваш выбор: “);

ch = getche();

printf(“\n”);

} while (!strchr (“1234”, ch));

return ch – 49; /* преобразование к целочисленному эквиваленту */

}

void check_spelling (void)

{

printf(“In check_spelling”);

}

void correct_errors (void)

{

printf(“In correct_errors”);

}

void display_errors (void)

{

printf(“In display_errors”);

}

void quit (void)

{

printf(“In quit”);

exit(0);

}

Программа работает следующим образом. Сначала на экран выводится меню и пользователь вводит число, соответствующее его выбору. Поскольку введенное число представлено в ASCII-коде, то необходимо вычесть 49 (ASCII-код цифры 0) для получения двоичного числа. Данное значение затем возвращается в main () и используется как индекс массива options – массива указателей на функцию. После этого вызывается соответствующая функция. Строковая функция strchr (“1234”, ch) возвращает указатель на первое вхождение символа ch в строку “1234”.



<== предыдущая лекция | следующая лекция ==>
Метод Ньютона (метод касательных) | Методические указания


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.