русс | укр

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

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

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

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


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

Указатели на функции


Дата добавления: 2013-12-23; просмотров: 1785; Нарушение авторских прав


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

Формат определения указателя на функцию:

<тип_возвращаемого_значения> (* <имя_указателя>) (<спецификация_формальных_параметров>);

При определении указателя имена параметров можно не использовать, главное, чтобы совпадало: тип возвращаемого значения, количество параметров и их типы.

Ниже представлен пример использования указателей на функции. В программе вводятся с клавиатуры два вещественных значения, знак операции (+, -, *, /), между значениями выполняется введенная операция, результат выводится на печать. В зависимости от введенного знака операции указатель на функцию в программе настраивается на одну из функций.

#include <stdio.h>

double summa(double x, double y) // Функция вычисляет сумму параметров

{

return x+y;

}

 

double mult(double x, double y) // Функция вычисляет произведение параметров

{

return x*y;

}

 

double div(double x, double y) // Функция вычисляет результат деления параметров

{

return x/y;

}

 

double razn(double x, double y) // Функция вычисляет разность параметров

{

return x-y;

}

 

void main()

{

double x, y, Rez; // Два исходных параметра и результат операции

char Ch; // Символ определяет знак выполняемой операции

double (*pFun)(double, double); // Указатель на функцию

printf("x="); scanf("%lf", &x); // Ввод x

printf("y="); scanf("%lf", &y); // Ввод y



printf("Ch="); fflush(stdin); // Сброс буфера ввода

scanf("%c", &Ch); // Ввод знака операции с клавиатуры

switch(Ch) // В зависимости от знака операции настраиваем указатель

// на одну из функций

{

case '+': pFun=summa; break;

case '-': pFun=razn; break;

case '*': pFun=mult; break;

case '/': pFun=div; break;

default: printf("Error!"); return;

}

Rez=(*pFun)(x, y); // Вызов функции через указатель

printf("Rez=%f", Rez);

}

 

7.9. Перегрузка функций (Си++)

Перегрузка функций – это использование одного имени для разных функций. При этом функции должны отличать своей сигнатурой (количеством параметров или их типами).

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

#include <stdio.h>

int summa(int a, int b) // Функция считает сумму 2-х параметров типа int

{

return a+b;

}

 

int summa(int a, int b, int c) // Функция считает сумму 3-х параметров типа int

{

return a+b+c;

}

 

double summa(double x, double y) // Функция считает сумму 2-х параметров типа double

{

return x+y;

}

 

void main()

{

int s1, s2;

double s3;

s1=summa(2, 3); // Вызывается первая функция

s2=summa(5, 5, 1); // Вызывается вторая функция

s3=summa(1., 2., 1.5); // Вызывается третья функция

printf("s1=%d s2=%d s3=%f", s1, s2, s3);

}

 



<== предыдущая лекция | следующая лекция ==>
Рекурсивные функции | Возможные параметры функции main


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


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

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

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


 


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

 
 

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

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