Profil von Yi JunS_A's SpaceFotosBlogListen Extras Hilfe

    C++ Puzzle

    It's a valid declaration: Char (*(*x())[]) ().
    I've been in confused for a long time. >_<
     
    Let's see the following code segement:
     
    #include <iostream>
    using namespace std;
     
    char retChar() { return 'A'; }
     
    char (*(*x())[1])() {
        char (*q[])() = { &retChar };
        char (*(*p)[1])() = &q;
        return p;
    }
     
    void main() { cout << (*(x()))[0](); }
     
    The output is 'A'.
     
    char (*(*x())[1])() is a function declaration,
    whose return value is a pointer,
    which points to an array of function pointers,
    and the function returns char.
    (^^ Thanks for Ji Cheng's help.)
     
    It seems that we get the answer finally.
    But char (*(*x())[])() and char (*(*x())[1])() are different.
    If we remove the '1' in the above code segement, it will appear:
    cannot convert from 'char (__cdecl *(*)[1])(void)' to 'char (__cdecl *(*)[])(void)'
     
    Now we know what is char (*(*x())[num])(),
    but what is Char (*(*x())[]) ()?

    Kommentare (9)

    Bitte warten...
    Der eingegebene Kommentar ist zu lang. Bitte kürzen Sie ihn.
    Sie haben keine Angabe gemacht. Bitte versuchen Sie es erneut.
    Ihr Kommentar kann im Moment leider nicht hinzugefügt werden. Bitte versuchen Sie es später erneut.
    Zum Hinzufügen eines Kommentars ist die Erlaubnis von einem Elternteil erforderlich. Erlaubnis einholen
    Der Elternteil hat die Kommentarfunktion deaktiviert.
    Ihr Kommentar kann im Moment leider nicht gelöscht werden. Bitte versuchen Sie es später erneut.
    Sie haben die maximale Anzahl an Kommentaren, die pro Tag zugelassen sind, überschritten. Versuchen Sie es in 24 Stunden erneut.
    Kommentare wurden in Ihrem Konto deaktiviert, da in unseren Systemen angegeben wird, dass Sie anderen Benutzern möglicherweise unerwünschte E-Mails versenden. Wenn Sie der Meinung sind, dass es sich beim Deaktivieren Ihres Kontos um einen Fehler handelt, wenden Sie sich an Windows Live Support.
    Schließen Sie die Sicherheitsüberprüfung unten ab, damit Sie ein Kommentar hinterlassen können.
    Die bei der Sicherheitsüberprüfung eingegebenen Zeichen müssen den Zeichen im Bild oder in der Audiodatei entsprechen.

    Melden Sie sich zum Hinzufügen eines Kommentars mit Ihrer Windows Live ID an (wenn Sie Hotmail, Messenger oder Xbox LIVE verwenden, besitzen Sie eine Windows Live ID). Anmelden


    Sie haben noch keine Windows Live ID? Registrieren

    毛 毛schrieb:
    ^_^ sorry msn space is not easy to use
    3 Dez.
    毛 毛schrieb:
    the structure is like  p->array[0]->fa()
          array[1]->fb()

    char (*(*x(int i))[2])()

    the inside "()" is the function label. see i put parameter in it.

    cout << (* x(1) )[0]();
     
    3 Dez.
    毛 毛schrieb:
    the structure is like  p->array[0]->fa()
         array[1]->fb()

    char (*(*x(int i))[2])()

    the inside "()" is the function label. see i put parameter in it.

    cout << (* x(1) )[0]();
     
    3 Dez.
    毛 毛schrieb:
    the structure is like  p->array[0]->fa()
        array[1]->fb()

    char (*(*x(int i))[2])()

    the inside "()" is the function label. see i put parameter in it.

    cout << (* x(1) )[0]();
     
    3 Dez.
    晓栋 胡schrieb:
    c++是门语言
    17 Nov.
    陈小乔schrieb:
    我竟然能看懂!!
    没白学C啊~~自我陶醉一几
     
    12 Nov.
    pighogswin​eschrieb:
    that's too wild!
    12 Nov.
    Chris Zhangschrieb:
    oh my god!
    12 Nov.
    Yi Jun Wangschrieb:
    返回返回char的函数的指针的数组的指针的函数...
    12 Nov.

    Trackbacks

    Die Trackback-URL für diesen Eintrag ist:
    http://un-real.spaces.live.com/blog/cns!932D37462BC0B64F!872.trak
    Weblogs, die sich auf diesen Eintrag beziehen
    • Keine