webentwicklung-frage-antwort-db.com.de

So erstellen Sie ein typedef für Funktionszeiger

Ich denke, es wäre einfacher, Funktionszeiger zu verwenden, wenn ich ein typedef für einen Funktionszeiger erstellt hätte, aber ich scheine mich auf eine Syntax oder Verwendung oder etwas über typedef für Funktionszeiger einzulassen, und ich könnte etwas Hilfe gebrauchen.

Ich habe

int foo(int i){ return i + 1;}
typedef <???> g;
int hvar;
hvar = g(3)

Das ist im Grunde das, was ich zu erreichen versuche. Ich bin ein ziemlich neuer C-Programmierer und das wirft mich zu sehr. Was ersetzt <???>?

32
SetSlapShot

Ihre Frage ist nicht klar, aber ich denke, Sie möchten vielleicht so etwas:

int foo(int i){ return i + 1;}

typedef int (*g)(int);  // Declare typedef

g func = &foo;          // Define function-pointer variable, and initialise

int hvar = func(3);     // Call function through pointer
78

Du hast recht. Der Funktionszeiger kann bequem verwendet werden, um auf die verschiedenen Funktionen desselben Rückgabetyps zu verweisen und die gleiche Anzahl von Argumenten zu verwenden. Die Argumenttypen sollten mit der Deklaration der Funktionszeigerargumente übereinstimmen.

In Ihrem Fall können Sie den Funktionszeiger g wie folgt definieren:

typedef int (*g)(int); // typedef des Funktionszeigers.

g ist ein Funktionszeiger für die Funktion, die den Wert int zurückgibt und ein Argument int verwendet.

Die Verwendung des Funktionszeigers könnte durch ein einfaches Programm veranschaulicht werden:

#include<stdio.h>

typedef int (*pointer_to_function)(int first_parameter_of_type_int, int second_parameter_of_type_int);

int my_function_returning_int_and_taking_two_int_arguments(int par1, int par2)
{
    int result = par1 + par2;
    return result;
}

int my_mul_function(int par1, int par2)
{
    int result = par1 * par2;
    return result;
}

int main()
{
    int res; // returning result will be here
    pointer_to_function my_fun_pointer; // declare function pointer variable;

    my_fun_pointer = my_function_returning_int_and_taking_two_int_arguments; // function pointer points to `my_function_returning_int_and_taking_two_int_arguments` function
    res = my_fun_pointer(2,3);       // Call function through pointer
    printf(" result of `my_function_returning_int_and_taking_two_int_arguments` = %d \n", res);


    my_fun_pointer = my_mul_function; // now function pointer points to another function: `my_mul_function` 
    res = my_fun_pointer(2,3);       // Call function through pointer
    printf(" result of `my_mul_function` = %d \n", res);

   return 0;
}

AUSGABE:

result of `my_function_returning_int_and_taking_two_int_arguments` = 5 
result of `my_mul_function` = 6 
3
sg7