2016-04-14 10 views
1

Also, wenn ich gegeben wurde eine die folgenden zwei Funktionen:Wie definiert man eine Variable, die ein Funktionszeiger ist, der andere Funktionen in c zuweisen kann?

void printhex(int x, char y, char z) 
{ 
    printf("%x%x%x,x,y,z); 
} 
void printdecimal(int x, char y ,char z) 
{ 
    printf("%i%i%i,x,y,z); 
} 

Wie ich eine Variable definieren würde, das ist ein Funktionszeiger, die entweder von den zwei gegebenen Funktionen zugewiesen werden können?

Auch innerhalb der Hauptfunktion würde ich feststellen, ob irgendwelche Befehlszeilenargumente nach dem Programmnamen eingegeben wurden, als das Programm ausgeführt wurde. Wenn ich etwas eingeben würde, wie würde ich den Funktionszeiger der Funktion printhex zuweisen können, aber sonst die Funktion dem Ausdruck dekodieren?

+0

Mögliches Duplikat von [Funktionszeiger in C] (http://stackoverflow.com/questions/1278841/function-pointer-in-c) –

Antwort

1

A1) Dies ist, wie der Funktionszeiger wird wie folgt aussehen:

void (*myFuncPtr)(int, char, char); 

Sie dann eine Funktion es wie folgt vergeben:

myFuncPtr = &printhex; 

Und es so nennen:

(*myFuncPtr)(1, 'a', 'b'); 

A2) Die argc Variable der main() wird feststellen, ob eine Befehlszeile a Neben dem Programmnamen selbst wurden andere Argumente eingegeben. Wenn argc > 1, dann argc - 1 wurden andere Zeichenfolgen beim Aufrufen des Programms übergeben. Dies liegt daran, dass argc auch den Programmnamen als einen der Parameter zählt.So etwas wie dies sollte für Sie arbeiten:

if (1 < argc) 
{ 
    myFuncPtr = &printhex; 
} 
else 
{ 
    myFuncPtr = &printdecimal; 
} 
2

Sie eine Variable deklarieren könnte ähnlich:

printSomething = &printhex; 

oder

printSomething = &printdecimal; 

Die & ist vollständig optional:

void (*printSomething)(int, char, char); 

Sie es zu einer dieser Funktionen mit zuweisen könnte , so könnte man zum Beispiel auch einfach printSomething = printhex; schreiben.

Sie fragte auch nicht, aber man kann die Funktion über den Zeiger mit (zum Beispiel) nennen:

(*printSomething)(1, 2, 3); 

Der * ist auch optional, so dass Sie nur schreiben konnte:

printSomething(1, 2, 3); 

Wenn Sie auch Hilfe mit Befehlszeilenargumenten benötigen, sollte das eine separate Frage sein.

1

typedef verwenden

void printhex(int x, char y, char z) { 
     printf("%x%x%x",x,y,z); 
} 

void printdecimal(int x, char y ,char z) { 
     printf("%i%i%i",x,y,z); 
}  

typedef void (*printer)(int x, char y ,char z); 

printer hex = &printhex; 
printer dec = &printdecimal; 
1

Wenn ich Sie richtig verstehe, sollte es einfach sein:

void (* ptr)(int, char, char); 
ptr = printhex; 

(*ptr)(a, b, c); //this will call the function 
0

Eine solche Variable würde deklariert werden als

void (*fptr)(int, char, char); 

dann assigne da Wert:

fptr = printhex; 

und verwendet, um eine Funktion aufzurufen:

fptr(13, 'a', 'b'); 

Oder Sie können einen neuen Namen für den Funktionstyp deklarieren:

typedef void (*PrintFuncPtr)(int, char, char); 

es dann für eine Variablendeklaration verwenden :

PrintFuncPtr fptr; 
0

Zu defi ne ein Funktionszeiger würden Sie die folgende Syntax verwenden:

return-type (*pointer name)(parameters);

in diesem Fall würden Sie verwenden: void (*fp)(int, char, char); für einen Funktionszeiger fp geeignet für die beiden Funktionen benannt Sie definiert haben.

Das Zuweisen eines Funktionszeigers kann wie jeder andere Zeiger erfolgen, außer dass Sie den Namen der Funktion verwenden. Zum Beispiel würde fp = printhex; genau das tun, was es sagt: die Adresse printhex dem Zeiger fp zuweisen. Sie müssen den &-Operator für printhex nicht verwenden, da der Bezeichner implizit in pointer-to-function konvertiert wird.

Verwandte Themen