Форум программистов, компьютерный форум CyberForum.ru

Указатели на функции (Прата) - не пойму, как это работает - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как ограничить поле ввода только одним символом? А двумя? http://www.cyberforum.ru/cpp-beginners/thread1228219.html
Как ограничить поле ввода только одним символом? А двумя? Например чтобы сразу после нажатия клавиши(двух), программа переходила к следующей операции, не ожидая нажатия "ентер", либо же не давала ввести символов больше положенного? Как сделать так, чтобы можно было напечатать в строку ввода только определённые символы, например y/n? Спасибо.
C++ Невозможно запустить программу. Отсутствует libiconv-2.dll Запуск программы невозможен так как на компьютере отсутствует libiconv-2.dll.попробуйте переустановить программу Добавлено через 36 секунд Что нужно сделать? http://www.cyberforum.ru/cpp-beginners/thread1228210.html
C++ Неверная обработка данных при вводе двух и более величин
У меня по коду все правильно, при вводе одного значения n вывод верный. Если ввод включает 2 и больше значений n, то первое значение, остальные такое чувство, что не проверяет программа. Вот код: #include <iostream> #include <vector> #include <cmath> using namespace std; int main() {
C++ Зависание потоков. Работа с файлами
Всем еще раз привет. Очень прошу помощи. Пишу на С++ под винду, с учетом специфики проекта выбор остановился на boost library. Пишу многопоточное приложение следующего вида: создается несколько потоков. далее потоки поочереди читают файл, выполняют какую-то длительную логику и поочереди записывают в другой файл. т.е. здесь важна очередность записи в файл, каждый поток ждет предыдущего:...
C++ Анализатор входящих сообщений сторонних ПО и сервисов http://www.cyberforum.ru/cpp-beginners/thread1228154.html
В WinAPI не силен, однако необходимо написать программу на С++, анализирующую входящие сообщения какого-нибудь сервиса обмена сообщениями, например вконтакте. По самому анализатору наброски есть, однако что абсолютно не могу понять - как моей программе получить входящие сообщения? Либо нужно как-то следить за открытым в другом окне браузером и отлавливать входящие, либо еще как-то... В общем...
C++ Возожно ли создать массив указателей на шаблоны функций? Можно ли создать массив указателей на шаблоны функций, если да, то как? Пробовал вот так template <class my_type> void my_func( my_type* input_arr) потом пытался запихнуть my_type* как аргумент функции, но компилятор ругается на то, что my_type не объявлен можно конечно сделать так: void (*p)(int*) = &my_func<int>; void (*pp)(float*) = &my_func<float>; но тогда получится несколько... подробнее

Показать сообщение отдельно
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,835
Записей в блоге: 17
19.07.2014, 13:59  [ТС]     Указатели на функции (Прата) - не пойму, как это работает
Поиздевался над кодом, чтобы немного уяснить для себя, как всё это работает:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// fun_ptr.cpp -- pointers to functions
#include <iostream>
double betsy(int);
double pam(int);
 
// Второй аргумент — указатель на функцию double,
// которая принимает аргумент типа int
void estimate(int lines, double (*pf)(int));
 
int main()
{
    using namespace std;
    int code;
 
    cout << "How many lines of code do you need? ";
    cin >> code;
 
    cout << "Here's Betsy's estimate:\n";
    estimate(code, betsy);
    cout << "Here's Pam's estimate:\n";
    estimate(code, pam);
 
    cout << "\n\tAddress of variable int code in"
    " function estimate() is\t" << &code << endl;
    cout << "\tValue of variable int code in"
    " function estimate() is\t" << code << endl;
    cout << endl;
 
    // cin.get();
    // cin.get();
    return 0;
}
 
double betsy(int lns)
{
    std::cout << "\n\tAddress of variable int lns in"
    " function betsy() is\t" << &lns << std::endl;
    std::cout << "\tValue of variable int lns in"
    " function betsy() is\t" << lns << std::endl;
    std::cout << std::endl;
 
    return 0.05 * lns;
}
 
double pam(int lns)
{
    std::cout << "\n\tAddress of variable int lns in"
    " function pam() is\t" << &lns << std::endl;
    std::cout << "\tValue of variable int lns in"
    " function pam() is\t" << lns << std::endl;
    std::cout << std::endl;
 
    return 0.03 * lns + 0.0004 * lns * lns;
}
 
void estimate(int lines, double (*pf)(int))
{
    using namespace std;
    cout << lines << " lines will take ";
    cout << (*pf)(lines) << " hour(s)\n";
 
    cout << "\tAddress of variable int lines in"
    " function estimate() is\t" << &lines << endl;
    cout << "\tValue of variable int lines in"
    " function estimate() is\t" << lines << endl;
    cout << endl;
}


Вот интересно, каким образом int lns в функции betsy() и int lns в функции pam() имеют один и тот же адрес? Я так понимаю, это должны быть разные переменные с разными адресами, ведь они локальные (инкапсулированы внутри функций)?
Миниатюры
Указатели на функции (Прата) - не пойму, как это работает  
 
Текущее время: 23:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru