Zeiger auf zweidimensionales Array mit Struktur setzen???



  • Hallo Leute,

    komme einfach nicht weiter....

    #define DIM1 = 30;
    #define DIM2 = 16;
    int gebe_teile_aus( ??? );
    
    int main(void)
    {
       struct meine_struktur{
       int teil_1;
       int teil_2;
       int_teil_3;
       };
    
       struct meine_struktur felder[DIM1][DIM2];
    
       /* Hier würde die Initialisierung felder[DIM1][DIM2].teile_ stattfinden */
    
       gebe_teile_aus( ??? );
       return 0;
    }
    
    int gebe_teile_aus( was muss übergeben werden ???  )
    {
    
       /* Hier möchte ich folgende Dinge tun können */
       felder[1][0].teile_1 = 20;
    
       /* oder auch */
       if(felder[1][0].teile_1 == 22) { /* bedingungen */ }
    }
    

    Leider bekomme ich es einfach nicht hin, einen Zeiger auf ein 2dimensionales Array mit Struktur zu setzen.
    Bei einem 1dimensionalen Array mit Struktur habe ich es bereits geschafft.
    Vielleicht kann mir da jemand weiterhelfen.
    Natürlich ist der Code oben nicht vollständig, wie z.B. fehlende Libary, etc.
    Der Code soll nur das Problem schildern.

    Herzlichen Dank.



  • Bist wohl im falschen Forum gelandet? Hier gehts um C#/.NET, nicht um C.

    Zu deiner Frage:

    int gebe_teile_aus( struct meine_struktur felder[][DIM2] );
    

    oder:

    int gebe_teile_aus( struct meine_struktur (*felder)[DIM2] );
    

    Siehe auch: http://c-faq.com/aryptr/pass2dary.html



  • Falschs Forum...

    Das Problem ist eher dass deine Struktur nur im Scope der Main Funktion deklariert ist, außerhalb hast du keinen Zugriff drauf, somit kannst du ihn gar net als Übergabetyp des Funktionsparameters nutzen.



  • Hallo, danke für eure Posts.
    Sorry wegen dem falschen Forum.
    Habe versucht, eure Bemerkungen anzuwenden.
    Leider gibt es noch Probleme...

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    struct feld_optionen{
        int status;
        int umgebung;
        int eigenschaft;
        int gesetzt;
    };
    
    const int BREITE = 30;
    const int HOEHE = 10;
    int initialisiere_felder( struct feld_optionen minenfelder[][HOEHE] );
    
    int main(void)
    {
       struct feld_optionen minenfelder[BREITE][HOEHE];
    
       initialisiere_felder(  minenfelder[][HOEHE] );
    
       /* Nach initialisierung mit minenfelder weiter arbeiten */
    
       return 0;
    }
    
    /* felder initialisieren */
    int initialisiere_felder( struct feld_optionen minenfelder[][HOEHE] )
    {
    int a_a, a_b, rand_x, rand_y;
    int anzahl_minen = 99;
    int counter_minen = 0; 
    
    srand((unsigned)time(NULL));
    
    	/* Array minenfelder inkl. Struktur initialisieren */
    	for ( a_a=0; a_a < HOEHE; a_a++)
    	{
    		for (a_b=0; a_b < BREITE; a_b++)
    		{
    		minenfelder[a_b][a_a].status = 0;
    		minenfelder[a_b][a_a].umgebung = 0;
    		minenfelder[a_b][a_a].eigenschaft = 0;
    		minenfelder[a_b][a_a].gesetzt = 0;
    		}
    	}
    
    	/* Mienen setzen. Ist Minenplatz schon vergeben, wird ein neuer Platz gesucht */
    	while (counter_minen < anzahl_minen)
    	{
    	rand_x = rand()%HOEHE;
    	rand_y = rand()%BREITE;
    
    	if(minenfelder[rand_y][rand_x].status == 1) { continue; }
    
    	minenfelder[rand_y][rand_x].status = 1;
    	counter_minen++;
    	}
    
    puts("Alles OK");
    
    return 1;
    }
    

    Folgender Fehler:
    array3.c: In Funktion »main«:
    array3.c:24: Fehler: expected expression before »]« token

    Wo liegt das Problem? Danke Euch



  • nicon schrieb:

    Folgender Fehler:
    array3.c: In Funktion »main«:
    array3.c:24: Fehler: expected expression before »]« token

    Wo liegt das Problem? Danke Euch

    Na steht doch da: Er erwartet dort einen Index und nicht einfach leere Klammern.



  • Tut mir Leid Leute,

    ich bastel jetzt schon seit Tagen daran rum, nur um endlich herauszufinden, wie man einen Zeiger auf ein zweidimensionales Array mit Struktur an eine Funktion übergibt, um dort auch Werte ändern zu können.

    Es sind bereits etliche stunden draufgegangen und ich komme keinen Schritt weiter. Ich wäre euch dankbar, wenn ihr mir das an dem Beispiel oben deutlich machen könntet.

    Danke Euch.



  • Sowas macht man indem man der Funktion die Adresse des Feldes übergibt, also mit einem Pointer.



  • Danke, aber genau das möchte ich wissen, wie es geht.

    Ist WISSEN so ein gehütetes Geheimnis????

    Kann mir niemand anhand des Beispiels oben einmal zeigen, wie es geht?

    lg nicon



  • nicon schrieb:

    Ist WISSEN so ein gehütetes Geheimnis????

    Nein, Pointer sind sogar mit das Gängigste und werden in jedem Tutorial breitgetreten bis zum geht nicht mehr breitgetreten. Googlen bringt dann solche Treffer: http://www.mathematik.uni-marburg.de/~cpp/pointer/index.html

    Ansonsten ist Wissen etwas, das man hütet (bzw. nur dem zugänglich macht, der auch was dafür tun will), denn es bedeutet Existenz (zumindest für mich) und Geld. Die Zeit, die Nerven und das Geld das ich verbraucht habe um mir dieses Wissen anzueigenen ist auch ein Faktor, der mich veranlasst nicht alles jedem bis ins Kleinste vorzukauen.

    Sebo


Anmelden zum Antworten