2012-04-05 13 views
0

Ich habe dieses Problem in einem Buch gefunden.Kann mir bitte jemand die Ausgabe von C-Programm erklären?

Problem:

Was ist die Ausgabe des folgenden Programms?

#include <stdio.h> 
int fun(int,int); 
typedef int(*pf) (int,int); 
int proc(pf,int,int); 

int main() 
{ 
    printf("%d\n",proc(fun,6,6)); 
    return 0; 
} 

int fun(int a,int b){ 
    return (a==b); 
} 

int proc(pf p,int a,int b){ 
    return ((*p)(a,b)); 
} 

Dieser Code, wenn ausführen, druckt 1.

heraus habe ich versucht, es zu verstehen, aber nein, es ist nichts. Was läuft in diesem Programm und warum gibt es 1 aus?

Vielen Dank im Voraus.

+8

Diese wie Hausaufgaben – Petesh

+0

Die Antworten auf mich aussieht, ist: '0'!. – leppie

Antwort

2

proc ruft über einen Funktionszeiger indirekt fun auf. Die Argumente, die fun empfängt, sind wieder 6 und 6, und der Gleichheitsoperator wertet einen int mit dem Wert 1 aus, weil sie gleich sind. Wenn sie nicht gleich wären, würde der Operator ==0 ergeben.

+0

danke für die Hilfe. –

1

In der ersten Hauptleitung

printf("%d\n",proc(fun,6,6)); 

ist proc Aufruf, die Argumente eines Funktionszeiger und zwei ganzzahlige Werte stattfinden. Funktionszeiger pf als typedef int(*pf) (int,int); Diese Zeile definiert printf("%d\n",proc(fun,6,6)); wird die Funktion aufrufen wie folgt definiert:

int proc(pf p,int a,int b){ 
return ((*p)(a,b)); 
} 

nun in dieser Funktion pf hält den Zeiger Spaß zu funktionieren. Dadurch wird die Funktion fun aufgerufen, die zurückgibt, ob die Werte von a und b wahr sind oder nicht. Da Sie 6,6 als Argumente übergeben haben, wird das Ergebnis wahr und deshalb erhalten Sie 1 als Antwort.

0
int fun(int,int); 

Funktion nimmt 2 int Argumente und gibt einen int

typedef int(*pf) (int,int); 

pf eine Funktion Zeiger ist, der die Adresse der Adresse einer Funktion zu speichern, die zwei ints als AGRs nimmt und gibt eine int

Proc ist eine Funktion, die 3 Args nimmt zuerst ist ein Funktionszeiger auf eine Funktion wie oben und zwei ganzzahlige Argumente.

proc(fun,6,6); 

obige Aussage ruft Spaß mit zwei args 6 und 6 und gibt true zurück, wenn sie gleich sind, das ist, wie das Ergebnis 1 ist

Verwandte Themen