array aus strukturen



  • hallo,

    ich habe eine structur der form:

    struct struktur{
        int var1;
        int var2;
        int var3;
    }
    

    ich brauche nun eine ganze menge von diesen strukturen.

    nun wollte ich ein array machen und die arrayelemente sollten diese strukturen sein. leider bekomme ich das irgendwie nicht hin.
    oder könnte man das auch noch anders lösen?

    Gruß
    Steffen



  • Meinst du so was:

    #include <iostream>
    
    struct struktur{ 
        int var1; 
        int var2; 
        int var3; 
    };
    
    int main( int argc, char **argv )
    {
    	struktur str[3];
    
    	return 0;
    }
    

    Wenn die Anzahl der Strukturen fix ist, die du machen musst, dann ist ein Array ok.
    Wenn die Anzahl dynamisch ist dann wuerde ich eher eine Liste nehmen (std::list)



  • wenn ich das richtig verstehe habe ich nun ein array mit vier elementen. jedes element ist eine struktur, wie sie vorher angegeben wurde.

    wie kann ich denn dann auf die einzelnen variablen in den strukturen zugreifen?
    str[1].var1?



  • Du hast im Beispiel ein Array mit 3 Elementen (der Index beginnt bei 0, dann 1, dann 2). 3 Gibt die Anzahl an, wieviele Elemente dein Array haben soll.
    Der Zugriff erfolgt so:

    #include <iostream>
    
    struct struktur{ 
        int var1; 
        int var2; 
        int var3; 
    };
    
    int main( int argc, char **argv )
    {
    	struktur str[3];
    
    	str[0].var1 = 3;
    
    	std::cout << str[0].var1 << std::endl;
    
    	return 0;
    }
    

    Das Array enthaelt dann natuerlich 3 mal deine Struktur - verbleichbar mit
    int var[3]
    das ist ein Array aus 3 Integer-Werten. Das heisst du koenntest deine Struktur auch so schreiben:

    struct struktur{ 
        int var[3];
    };
    


  • Ah,

    vielen Dank!



  • ich weiß nun nicht, wie viele strukturen ich benötigen werde.
    so wollte ich die klammern [] leer lassen. dann bekomme ich allerdings ne fehlermeldung. scheib ich eine zahl rein, dann gehts.

    muss man die zahl direkt angeben oder kann man das auch noch anders lösen, wenn vorher nicht weiß, wievil man davon benötigt?



  • Mit Pointer und dynamische Speicherreservierung.

    Struktur *arr; // Pointer
    arr = new Struktur[anzahl];  // Speicher für <anzahl> Strukturen belegen
    

    edit:

    Natürlich net vergessen Speicher wieder freizugeben wenn du möchtest:

    delete[] arr;
    


  • wie knn ich denn dann darauf zugreifen?
    ich habe z.b folgendes erstellt

    Struktur *str; // Pointer
    str = new Struktur[anzahl]; // Speicher für <anzahl> Strukturen belegen

    nun möchte ich eine struktur füllen

    bei str.var1[ii]= 0; (wobei ii z.B. 0) ist gibts probleme. ich steig da noch nicht so ganz dahinter.



  • Das macht man wie zuvor:

    #include <iostream>
    
    struct Struktur{ 
        int var[3];
    };
    
    int main( int argc, char **argv )
    {
    	Struktur *str; // Pointer 
    	int anzahl = 3;
    	str = new Struktur[anzahl]; // Speicher für <anzahl> Strukturen belegen 
    	str[0].var[0] = 3;
    	std::cout << str[0].var[0] << std::endl;
    	delete( str );
    
    	return 0;
    }
    


  • Die objektorientierte, evtl. elegantere Implementierung würde sich auf die Dynamischen Containerklassen der Standardbibliothek stützen. Schau dir mal das entsprechende Kapitel in deiner C++-Referenz an...


Anmelden zum Antworten