Schutzverletzung bei Matrix



  • Zuerst einmal danke für die schnellen Antworten!

    @Sepp: Du hast mit deiner Vermutung natürlich Recht und dot hat mir Kenntnisse unterstellt, die ich gar nicht habe. 😉

    Mit konstanter Zeilen- und Spaltengröße hätte ich es folgendermaßen gemacht (scheint auch zu funktionieren):

    #include <stdio.h>
    #include <stdlib.h> 
    
    #define z 4
    #define s 6
    
    int fill(int mat[z][s]){
    
        int i, j;
        for(i=0;i<z;i++){
            for(j=0;j<s;j++)
               mat[i][j]=rand()%2;
        }
    }
    
    int output(int mat[z][s]){
    
        int i,j;
        for(i=0;i<z;i++){
            for(j=0;j<s;j++)
                printf("%i ", mat[i][j]);
            printf("\n");
        }
    }
    
    int main(){
    
        int matrix[z][s];
    
        fill(matrix);
        output(matrix);
    
    }
    

    Ist daran irgendwas auszusetzen? Irgendwas falsch übergeben?

    Und wenn ich die Spalten- und Zeilenanzahl variabel halten will bzw. vom Nutzer eingeben lassen möchte, könnte ich es dann einfach so machen (auch das scheint zu funktionieren)?

    int main(){
    
        int z;
        int s;
    
        printf("\nBitte Anzahl der Zeilen angeben: ");
        scanf("%i", &z);
    
        printf("\nBitte Anzahl der Spalten angeben: ");
        scanf("%i", &s);
    
        int matrix[z][s];
    
        fill(z, s, matrix);
        output(z, s, matrix);
    
    }
    


  • Guiri schrieb:

    #define z 4
    #define s 6
    

    Dir ist schon klar, das jedes einzelne z bzw s durch die Zahlen ersetzt werden?

    Darum nimmt man i.A. für defines Großbuchstaben und natürlich aussagekräftiger Namen.

    #define MATRIX_ANZ_ZEILEN  4
    #define MATRIX_ANZ_SPALTEN 6
    


  • Oder noch besser: Man nimmt gar kein #define, sondern const, am besten so lokal wie möglich... 😉

    int main()
    {
      const int z = 4;
      const int s = 6;
    
      ...
    }
    


  • dot schrieb:

    Oder noch besser: Man nimmt gar kein #define, sondern const, am besten so lokal wie möglich... 😉

    int main()
    {
      const int z = 4;
      const int s = 6;
    
      ...
    }
    

    das kompiliert aber kein c89 compiler



  • edit: 😉



  • ...



  • DirkB schrieb:

    Guiri schrieb:

    #define z 4
    #define s 6
    

    Dir ist schon klar, das jedes einzelne z bzw s durch die Zahlen ersetzt werden?

    Darum nimmt man i.A. für defines Großbuchstaben und natürlich aussagekräftiger Namen.

    #define MATRIX_ANZ_ZEILEN  4
    #define MATRIX_ANZ_SPALTEN 6
    

    Prinzipiell ist mir schon klar, was das "define" bewirkt. Mir ist aber durch dein Posting gerade noch einmal klar geworden, welchen Sinn die Großbuchstaben und die konkretere Parameterbenennung hat.

    Und ansonsten: Danke an alle! 👍



  • a-a schrieb:

    dot schrieb:

    Oder noch besser: Man nimmt gar kein #define, sondern const, am besten so lokal wie möglich... 😉

    int main()
    {
      const int z = 4;
      const int s = 6;
    
      ...
    }
    

    das kompiliert aber kein c89 compiler

    Nun, ich hab das natürlich mit drei verschiedenen Compilern (MSVC, gcc und Comeau) getestet und alle haben es anstandslos kompiliert. Aber ich kann im C90 Standard tatsächlich nichts finden, das das erlauben würde. Wieder was gelernt...



  • dot schrieb:

    Nun, ich hab das natürlich mit drei verschiedenen Compilern (MSVC, gcc und Comeau) getestet und alle haben es anstandslos kompiliert. Aber ich kann im C90 Standard tatsächlich nichts finden, das das erlauben würde. Wieder was gelernt...

    natürlich ... tja ... dann teste noch einmal 😃
    zu den anderen beiden compiler kann ich nix sagen, aaaber was msvc betrifft:
    das wirst wohl im c++ modus getestet haben, denn sonst würdest du nen

    error C2057: Konstanter Ausdruck erwartet
    

    bekommen :p
    das ergibt jedenfalls mein test mit dem mvsc 2012



  • Oh verdammt, ich hab natürlich im C Modus getestet, aber mir dämmert grad, dass ich wohl überall einfach den Code aus meinem Beispiel reinkopiert hab, der gar kein Array enthält *facepalm*

    Danke für den Hinweis und wie gesagt, laut C Standard so oder so tatsächlich nicht erlaubt...leider...


Anmelden zum Antworten