struct array übergeben



  • das hatt ich glaube ich auch schon versucht:

    #include <stdio.h>
    
    typedef struct Figur
     {
         int figur;
         int farbe;
     } sFig;
    
    void setze(sFig **hallo);
    
     int main(){
         sFig hi[3][3];
    
         setze(hi);
    
         printf("%d\%d",hi[1][1].figur,hi[1][1].farbe);
    
         getchar();
         return 0;
     }  
    
    void setze(sFig **hallo){
         *hallo[1][1].figur=1;
         *hallo[0][1].farbe=1;
     }
    

    kommt wieder
    cannot convert `sFig (*)[3]' to `sFig**' for argument `1' to `void setze(sFig**)'

    hmm



  • so:

    void setze(sFig hallo[][3]){ 
         hallo[1][1].figur=1; 
         hallo[0][1].farbe=1; 
     }
    

    oder so:

    void setze(sFig hallo[3][3]){ 
         hallo[1][1].figur=1; 
         hallo[0][1].farbe=1; 
     }
    


  • ja so funzt das. aber was wird denn jetzt genau übergeben? mit setze(hi) wird doch die adresse das arrays übergeben, oder?
    und setze(sFig hallo[][3]) erwarten auch einen zeiger, und zwar einen auf ein array mit 3 Inhalten?
    aber warum funzt dann nicht setze(sFig *hallo), denn hier wird doch auch einfach ein zeiger erwartet, ich verstehe die interpretation von setzte(sFig hallo[][3]) nicht genau...

    Aber vielen Dank schonmal!



  • außerdem gibt er nun 12009055971 aus, was wohl adressen sein werden....



  • nein, mein fehler, feld[0][1] war einfach nicht initialisiert, hatte also komischen wert.

    danke dir nochmal



  • ich werde hier noch verrückt, warum geht das denn nu schon wieder nicht?

    #include <stdio.h>
    
    typedef struct Position
    {
         int x;
         int y;
     }  sPos;
    
    void setze(sPos *pos){
        *pos.x=1;
        *pos.y=1;
    }
    
    int main(){
        sPos pos;
    
        setze(&pos);
    }
    

    request for member `x' in `pos', which is of non-class type `sPos*'



  • man das ist hier schon ein monolog....

    habs mal wieder selbst gefunden, halte jetzt auch die klappe

    muss natürlich

    (*ziel).x = 1;
    

    sein



  • lorsch schrieb:

    aber was wird denn jetzt genau übergeben? mit setze(hi) wird doch die adresse das arrays übergeben, oder?

    Ja.

    lorsch schrieb:

    und setze(sFig hallo[][3]) erwarten auch einen zeiger, und zwar einen auf ein array mit 3 Inhalten?

    Etwas unglücklich formuliert. setze() erwartet ein Array (unsized), wobei jedes Element vom Typ sFig[3] sein muss.

    lorsch schrieb:

    aber warum funzt dann nicht setze(sFig *hallo)

    Weil hier nur ein Array mit Elementen vom Typ sFig akzeptiert wird.

    lorsch schrieb:

    muss natürlich

    (*ziel).x = 1;
    

    sein

    Oder du schreibst

    ziel->x = 1;
    


  • printf("%d\%d",hi[1][1].figur,hi[1][1].farbe);
    

    was macht denn das '\' so ganz alleine da drin? ist doch keine Escapesequenz...

    mfg (c)h



  • Vielleicht will er ja sowas

    printf("%d\\%d",hi[1][1].figur,hi[1][1].farbe);
    

Anmelden zum Antworten