Arraygröße erst zur Laufzeit eines Programmes - Verständisproblem



  • Hallo liebe Community,

    ich lerne gerade C++ als erste Programmiersprache nach der Lektüre von Prof. Breymann "der C++ Programmierer". Ich habe ein Verständnisproblem in Sachen Arrays.

    Laut Buch wird ein Array dessen Größe zur Kompilationszeit noch nicht bekannt ist mit "new" dynamisch festgelegt. Zitat:

    int (* const p2)[7]= new int [5][7];
    

    soweit alles klar. Nur habe ich ein Problem mit der Aussage "zur Laufzeit eines Programmes".

    Denn folgendes Codebeispiel funktioniert ebenfalls, wobei auch hier die Anzahl der Zeilen und Spalten einer Matrix zur Compilationszeit noch nicht bekannt sind:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int z, s;
    
        cin >> z >> s;
    
        int arr1[z][s]; // Array erstellen
    
        
        for(int i = 0; i < z; ++i) { // Array füllen
            for(int j = 0; j < s; ++j) {
                arr1[i][j] = i*i + j*j;
            }
        }
    
        
        for(int i = 0; i < z; ++i) { / Array ausgeben
            for(int j = 0; j < s; ++j) {
                cout << arr1[i][j] << " ";
            }
            cout << endl;
        }
        return 0;
    }
    
    

    mir ist klar dass sich das eine auf dem Heap, das andere auf dem Stack abspielt. Woher kommt die Aussage dass Methode 1 zur Laufzeit eines Programms angewandt werden kann, nach der statischen jedoch müsste die Größe zur Kompilationszeit bereits feststehen, funktioniert aber auch???

    btw. habe ich das gleiche Problem im Kapitel "Zeiger auf Funktionen", in dem es auch heisst dass mittels Zeiger auf Funktionen diese zur Laufzeit des Programmes aufgerufen werden können, wenn ich ebenso verschiedene Funktionen mittels if / else oder switch genausogut zur Laufzeit aufrufen kann?

    es handelt sich hierbei zwar nicht um ein konkretes Codeproblem, hoffe jedoch dass jemand den Nebel etwas lichten kann.



  • @HarryS_79 sagte in Arraygröße erst zur Laufzeit eines Programmes - Verständisproblem:

    Denn folgendes Codebeispiel funktioniert ebenfalls,

    ...ist aber nicht standardkonfom - und nutzt ein Feature namens "variable length array".

    Wenn du mit gcc/clang testest, kompiliere es mit -Wpedantic (oder -Wvla):

    /tmp/vla.cpp:11:9: warning: ISO C++ forbids variable length array ‘arr1’ [-Wvla]
       11 |     int arr1[z][s]; // Array erstellen
          |         ^~~~
    /tmp/vla.cpp:11:9: warning: ISO C++ forbids variable length array ‘arr1’ [-Wvla]
    




  • ok, das leuchtet mir ein. Vielen Dank für die Erklärungen!


Log in to reply