2017-04-04 2 views
1

J'ai ce programme et je reçois:Comment affecter le pointeur de fonction à une fonction

lvalue requis comme opérande gauche d'affectation

en raison de la ligne function_a = function.

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); 
} 

Je veux mettre function_a-function_b en fonction set_a. Donc, je m'attends à la sortie 12, 2. Qu'est-ce que je devrais faire pour l'assigner correctement?

+1

Qu'avez-vous fait jusqu'à présent pour tenter de résoudre ton problème? –

+1

@narusin putain, il ne me laisse pas downvote le commentaire :-( – George

Répondre

4

Une définition de fonction ne peut pas être remplacée par une affectation, c'est-à-dire qu'une définition de fonction n'est pas une valeur à laquelle vous pouvez affecter quelque chose, et c'est la raison pour laquelle vous obtenez l'erreur; Mais vous pouvez définir un pointeur de fonction et attribuer des définitions de fonctions, et appelez le pointeur de fonction comme si elle était une fonction dans le sens d'une définition de fonction ordinaire:

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; 
}