Array erstellung



  • Kann mir jemand erklären warum der Code unten nicht funktioniert ? Was ist falsch ?

    int anzahl;
    int array[]={10,14,5,3,80,60};
    anzahl = sizeof(array)/sizeof(int);
    int array2[anzahl];
    


  • anzahl ist kein konstanter Ausdruck.



  • Hm, aber anzahl als const deklarieren kann ich ja auch nicht, denn dann kann ich darin ja nichts abspeichern. Gibt's hierfür keine Lösung ?



  • Sauerkrauth schrieb:

    Hm, aber anzahl als const deklarieren kann ich ja auch nicht, denn dann kann ich darin ja nichts abspeichern. Gibt's hierfür keine Lösung ?

    Logisch kannst du das. Musst halt die Variable bei der Definition initialisieren (auch wenn dein Code dann C++ wäre)



  • interpreter schrieb:

    anzahl ist kein konstanter Ausdruck.

    Afair muss er das doch auch nicht, Stichwort variable-length Arrays. Also ich seh erstmal keinen Grund, warum der Code falsch sein sollte. Mal abgesehen davon, dass das mit dem konstanten Ausdruck trotzdem die bessere Variante wäre.



  • Sauerkrauth schrieb:

    int anzahl;
    int array2[anzahl];
    

    Das geht nicht! Der Compiler muss die Länge kennen (was er theoretisch auch tut), oder du musst den Speicher dynamisch anfordern.



  • interpreter schrieb:

    [Logisch kannst du das. Musst halt die Variable bei der Definition initialisieren (auch wenn dein Code dann C++ wäre)

    Funktioniert nicht, oder ich habe es anderst gemacht als Du es gemeint hast.

    Wenn ich das ganze mit MinGW probiere, dann bekomme ich nur ne Warnung.

    Na ja, mal Danke für die ganzen Antworten.



  • Du musst den Speicher dynamisch anfordern, also statt :

    int anzahl; 
    int array[]={10,14,5,3,80,60}; 
    anzahl = sizeof(array)/sizeof(int); 
    int array2[anzahl];
    

    musst du das schreiben:

    int anzahl; 
    int array[]={10,14,5,3,80,60}; 
    anzahl = sizeof(array)/sizeof(int); 
    int *array2=(int*)malloc(anzahl);
    

    Beachte: Anzahl hat wahrscheinlich nur den Wert von einem int. Es wird nämlich nicht die Länge des ganzen Arrays zurückgegeben bei sizeof, sondern nur die Größe der Startadresse.

    Grüße,
    Harri



  • So, habs jetzt ausprobiert. Das mit sizeof geht doch.(hatte ich aalso falsch im Kopf...)

    Also kannst du dann durchaus schreiben int* array2=(int*)malloc(anzahl);

    Grüße,
    Harri



  • In diesem speziellen Fall würde ich doch einfach

    int anzahl;
    int array[]={10,14,5,3,80,60};
    anzahl = sizeof(array)/sizeof(int);
    int array2[sizeof(array)/sizeof(int)];
    

    schreiben - sizeof(array)/sizeof(int) ist nämlich ein konstanter Ausdruck.


Anmelden zum Antworten