grösse eines struct elements



  • hmm warum kann ich eigentlich nicht die grösse eines struct elements bestimmen ???

    typedef struct{
    	long uu;
    	char tt;
    }t_test;
    int groesse=sizeof(t_test.tt);
    

    geht nicht.
    Ist zwar nicht so dramtisch weil

    t_test v_test;
    groesse=sizeof(v_test.tt);
    

    funzt, aber ich wüsst schon gerne meinen denkfehler



  • Der "Denkfehler" ist, dass eine Struktur gleichwertig zu einer Instanz ist. Die .element-Schreibweise funktioniert nur, wenn auf der linken Seite eine Instanz der Struktur steht.

    [ In C++ würde t_test::tt funktionieren, aber C kennt den :: Operator nicht. ]



  • fast verstanden THX
    aber eigentlich dürfte dann auch nicht
    sizeof(t_test)
    klappen 😕
    (irgendwie wird mir c immer unsympatischer)



  • Doch. sizeof kann sowohl Typnamen als auch Instanzen des Typs verarbeiten.

    t_test.tt ist aber ein Mischmasch.



  • Ich bin nicht ganz sicher, aber das könnte historische Gründe haben. Ganz früher waren struct-Komponenten nicht in einem eigenen Namensraum, so dass du sizeof(tt) hättest schreiben können. Jedenfalls folgere ich das aus der Tatsache, dass viele Unix-Strukturen-Elemente so eigenartige Namen haben, z.b. in struct stat fangen alle mit st an, st_blksize, st_uid usw, oder struct tm hat Elemente die tm_sec, tm_day usw. heißen.


Anmelden zum Antworten