zugriff auf element in struct



  • Bin gerade über folgende Funktion gestolpert...

    struct array{ int wert[3]; }a;
    
    void output_array(struct array z)
    {
    int i;
    for(i=0; i < sizeof(struct_array)/sizeof(int); i++)
    printf("%d\t", z.wert[i]);
    printf("\n");
    };
    

    wieso kann man mit

    sizeof(struct_array)
    

    auf das array in der structur zugreifen!? Es müsste doch heissen

    sizeof(Variablen_Bezeichner.wert/sizeof(int))
    


  • ich glaub du müsstest folgendes machen:

    //statt sizeof(struct_array);
    sizeof(z.wert);
    

    weil du musst ja gesamte Feldgröße / ein Feldelement



  • sizeof(struct array) (ohne _!) ist die Größe, die die gesamte Struktur hat. Also inklusive des Arrays. Das ist kein Zugriff! Der Zugriff erfolgt in Zeile 7.

    Der Code ist aber schlecht, da die Struktur mit Paddingbytes gefüllt werden und daher größer als das Array sein kann.



  • for(i=0; i < sizeof(a.wert)/sizeof(int); i++)
    

    ist gleich

    for(i=0; i < sizeof(struct_array)/sizeof(int); i++)
    

    oder sehe ich das falsch, warum wurde die zweite version benutzt [/cpp]sizeof(struct_array)/sizeof(int)[cpp] !?
    geht das nur weil die struct ein element/datentyp hat. Was wäre bei einer nicht gleichartigen struct mit einem int element und einem char element !?

    komplette listing

    #include <stdio.h>
    
    struct array{ int wert[3]; };
    
    void output_array(struct array z)
    {
    int i;
    for(i=0; i < sizeof(struct_array)/sizeof(int); i++)
    printf("%d\t", z.wert[i]);
    printf("\n");
    };
    
    int main()
    {
    struct array new_array;
    new_array.wert[0] = 10;
    new_array.wert[1] = 20;
    new_array.wert[2] = 30;
    
    output_array(new_array);
    return 0;
    }
    

Anmelden zum Antworten