2017-04-04 3 views
1

Ich habe dieses Programm, und ich bin immer vergeben.Wie Funktion Zeiger auf eine Funktion

int function_a(int j){ 
    return j+10; 
} 

int function_b(int j){ 
    return j; 
} 

void set_a(int (*function)(int)){ 
    function_a = function; 
} 

int main(){ 
    int a = function_a(2); 
    printf("%d, ", a); 

    set_a(function_b); 

    int b = function_a(2); 
    printf("%d", b); 
} 

Ich möchte function_a-function_b in Funktion set_a einzustellen. Also erwarte ich Ausgabe 12, 2. Was sollte ich tun, um dies richtig zuzuordnen?

+1

Was Sie bisher bei dem Versuch getan zu lösen Ihr Problem? –

+1

@narusin verdammt, es wird mich nicht den Kommentar ablehnen :-( – George

Antwort

4

Eine Funktionsdefinition kann nicht durch Zuweisung ersetzt werden, d. H. Eine Funktionsdefinition ist kein Lvalue, dem Sie etwas zuweisen können, und deshalb erhalten Sie den Fehler; Aber Sie können einen Funktionszeiger definieren und verschiedene Funktionsdefinitionen zuweisen, und den Funktionszeiger aufrufen, als ob es sich um eine Funktion im Sinne eines gewöhnlichen Funktionsdefinition waren:

int function_a(int j){ 
    return j+10; 
} 

int function_b(int j){ 
    return j; 
} 

int (*f)(int) = function_a; 

void set_a(int (*function)(int)){ 
    f = function; 
} 


int main(int argc, const char *argv[]) 
{ 

    int a = f(2); 
    printf("%d, ", a); 

    set_a(function_b); 

    int b = f(2); 
    printf("%d", b); 

    return 0; 
} 
Verwandte Themen