Frage zu einem Typedef



  • Hallo,

    ich hab folgendes typedef:

    typedef int(*function)(int,int);
    

    ich versteh es nicht!

    Ich dachte typedef geht
    typedef altertype neuertyp

    doch wo ist hier der neue typ?Der funktionszeiger ist doch der alte typ oder?



  • Hier ist der neue Typ function und der ist dann ein typedef für void(*)(int,int)

    BR

    evilissimo



  • aber warum ist das hier so?
    verwirrt mich!

    und wieso void(*) und nicht int?



  • Eine_kl_Frage schrieb:

    aber warum ist das hier so?

    Das ist immer so.

    typedef Typ Deklarator

    Typ ist hier int
    Deklarator ist (*function)(int,int)

    Das liest man dann ungefähr so: function ist etwas, dass man mit * dereferenzieren kann (also ist es ein Zeiger). Das Ergebnis davon kann man mit () und 2 int-Argumenten aufrufen (also ist es eine Funktion). Ergo: function ist ein Zeiger auf eine Funktion mit 2 int-Argumenten.

    Simpelbeispiel: typedef unsigned char byte;
    Typ: unsigned char
    Deklarator byte

    Bei simplen Deklarationen ist der Deklarator natürlich auch simpel, deswegen könnte man darauf kommen, dass einfach typedef altertyp neuertyp geschrieben wird, aber das ist eben nur die halbe Wahrheit.

    Wie komplizierte Deklaratoren aufgebaut werden erfährst du in jedem vernünftigen C++(oder auch C)-Buch.

    und wieso void(*) und nicht int?

    int(*)(int,int) ist richtig.



  • ok, ist mir zwar noch etwas schleierhaft, aber gut, werd schon noch dahinter kommen!

    Da wollte ich aber fragen, wie kann man so ein array aus funktionszeigern ohne ein typedef machen?



  • int (*functions[10])(int, int);
    

    Oder verwende einen entsprechenden Container.



  • Eine_kl_Frage schrieb:

    ok, ist mir zwar noch etwas schleierhaft, aber gut, werd schon noch dahinter kommen!

    Da wollte ich aber fragen, wie kann man so ein array aus funktionszeigern ohne ein typedef machen?

    Du siehst das ganze falsch. Betrachte es mal so: Nimm einfach das, was normalerweise eine Variable erzugt und setze ein typedef davor. Das, was dann normalerweise die Variable ist, ist jetzt der Typ.


Anmelden zum Antworten