2015-11-23 5 views
-26

Как использовать значение из my_int_func и my_int_func2 в качестве аргументов sum с помощью указателя на функцию?Указатель использования функции вызова

#include <iostream> 

using namespace std; 

void my_int_func(int x){ 
    cout<<x<<endl; 
} 


void my_int_func2(int y){ 
    cout<<y; 
} 
int main(){ 
    void (*huu)(int); 
    huu = *my_int_func; 
    (*huu)(2); 
    void (*uuu)(int); 
    uuu = *my_int_func2; 
    (*uuu)(4); 
    return 0; 
} 

void sum(int a, int b){ 

} 
+2

Что вы пытаетесь достичь? – ouah

+3

Непонятно, что вы хотите делать. Ваши две функции не возвращают значение, но они только печатают его на экране. Если вы хотите суммировать два значения, которые вы отправляете в качестве параметров для этих функций, вам просто нужно называть 'sum (2,4)', которые будут реализованы как 'void sum (int a, int b) {return a + b; } '. Нет необходимости в указателях функций, и если вы хотите использовать их для упражнений, неясно, как вы их используете – user463035818

+3

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

ответ

2

Прежде всего: Ваши функции void my_int_func(int x) и void my_int_func2(int y) ничего не возвращает (возврат тип void). Они просто запрашивают входные параметры до stdout.

То, что вы, вероятно, хотите что-то вроде этого

#include <iostream> 

using namespace std; 

int my_int_func(int x) 
{ 
    return x; 
} 

int my_int_func2(int x) 
{ 
    return x; 
} 

void sum(int x, int y) 
{ 
    std::cout << x << " + " << y << " = " << (x + y) << endl; 
} 

int main() 
{ 
    int (*f1)(int) = *my_int_func; 
    int (*f2)(int) = *my_int_func2; 
    sum(f1(1),f2(2)); 
} 

Это вручат целые значения 1 и 2 к my_int_func и my_int_func2. Они вернут эти значения в качестве входных данных для sum, которые затем вызовут 1 + 2 = 3.

Однако эти две функции не очень полезны. Лучшим и менее статическим способом было бы считывать числа с пользовательского ввода, как указал Влад.

0

Кажется, вы имеете в виду что-то вроде следующего

#include <iostream> 

int my_int_func() 
{ 
    std::cout << "Enter an integer: "; 

    int x = 0; 
    std::cin >> x; 

    return x; 
} 

int my_int_func2() 
{ 
    std::cout << "Enter an integer: "; 

    int x = 0; 
    std::cin >> x; 

    return x; 
} 

long long int sum(int(), int()); 

int main() 
{ 
    std::cout << sum(my_int_func, my_int_func2) << std::endl; 
    return 0; 
} 

long long int sum(int f1(), int f2()) 
{ 
    return f1() + f2(); 
} 

Другой возможный подход заключается в следующем

#include <iostream> 

int my_int_func() 
{ 
    std::cout << "Enter an integer: "; 

    int x = 0; 
    std::cin >> x; 

    return x; 
} 

int my_int_func2() 
{ 
    std::cout << "Enter an integer: "; 

    int x = 0; 
    std::cin >> x; 

    return x; 
} 

long long int sum(int, int); 

int main() 
{ 
    int (*pf[2])() = { my_int_func, my_int_func2 }; 

    int x = pf[0](); 
    int y = pf[1](); 

    std::cout << sum(x, y) << std::endl; 
    return 0; 
} 

long long int sum(int x, int y) 
{ 
    return x + y; 
} 
+2

Теперь автор вопроса покажет нам, что является пунктом этого синтаксически громоздкого устройства. –

+0

@ BR41N-FCK Вы можете подождите автора в течение недели. :) Это не так редко. :) Если что-то не так с моим ответом, он всегда может написать комментарий к нему, и я удалю ответ. –

+0

@SothikVicheachann Я добавил свое сообщение и функции, объявленные как параметры, неявно преобразованные в указатели. Таким образом, эти записи int() и int (*)() эквивалентны. –

Смежные вопросы