2010-12-31 20 views
2
using namespace std; 

int addition (int a, int b) 
{ 
    return (a+b); 
} 

int subtraction (int a, int b) 
{ 
    return (a-b); 
} 
int operation (int x, int y, int (*functocall)(int,int)) 
{ 
    int g; 
    g = (*functocall)(x,y); 
    return(g); 
} 
int main() 
{ 
    int m,n; 
    int (*minus)(int,int) = subtraction; 

    m = operation (7,5,addition); 
    n = operation (20,m,minus); 
    cout << n; 
    return 0; 
} 

Kann mir diese ZeileC++ Zeiger auf Funktionen

int (*minus)(int,int) = subtraction; 

Vielen Dank jemand erklären!

+0

beheben bitte –

Antwort

2

"minus" ist ein Name einer Variablen, die ein Zeiger auf eine Funktion ist, die zwei int-Argumente nimmt und ein anderes int zurückgibt. Die Funktion "Operation" benötigt 3 Argumente: 2 Ints und einen Zeiger auf eine Funktion, die auf 2 Ints funktioniert und eine andere zurückgibt. Wenn sie aufgerufen wird, wendet die Operationsfunktion Argument 3 auf die Argumente 1 und 2 an.

+0

Vielen Dank, ich verstehe jetzt. Frohes neues Jahr. –

2
int (*minus)(int,int) 

sagt

Ein Zeiger auf eine Funktion, zwei ints als Argumente nimmt einen int zurückkehrt.

Die Klammern um (*minus) gibt es sicher zu stellen, dass der Stern auf den Namen des typedef bindet und nicht den Rückgabetyp (das heißt, wird die Funktion nicht ein int zurückgeben *).

+0

Dank der Formatierung. Ich habe es –

3

int (* minus) (int, int) = Subtraktion; erzeugt eine Variable namens minus und weist ihr einen Zeiger auf die Funktion namens Subtraktion zu. wenn der Code gültig ist, dann würde die Funktion Subtraktionint Subtraktion deklariert werden (int a, int b);.

Die beste Möglichkeit, mit Funktionszeigern umzugehen, besteht darin, sie mit typedef lesbar zu machen.

Beispiel:

typedef int (*math_op)(int,int); // new types is math_op 

int subtraction (int a, int b) 
{ 
    return (a-b); 
} 

math_op minus = subtraction; 

später können diese aufgerufen werden, wie sie normalen Funktionen sind.

Beispiel:

int result = minus(10, 2); // result is now set to 8 

Code neu geschrieben:

using namespace std; 

typedef int (*math_op)(int,int); // new types is math_op 

int addition (int a, int b) 
{ 
    return (a+b); 
} 

int subtraction (int a, int b) 
{ 
    return (a-b); 
} 

int operation (int x, int y, math_op functocall) 
{ 
    int g; 
    g = functocall(x,y); 
    return(g); 
} 

int main() 
{ 
    int m,n; 
    math_op minus = subtraction; 

    m = operation (7,5,addition); 
    n = operation (20,m,minus); 
    cout << n; 
    return 0; 
}