int-Array an Funktion übergeben



  • Hey ich habe folgende Funktion:

    void Funktion(int Position[2])
    {
        cout << Position[0] << "\t" << Position[1] << "\n";
    }
    

    und ich möchte sie eigentlich so aufrufen:

    Funktion({100, 200});
    

    Ich bekomme aber vom Compiler folgenden Fehler:

    24 main.cpp expected primary-expression before '{' token
    

    Ich möchte nicht unbedingt vorher ein 2d-Array initialisieren und das übergeben.

    Danke, MfG
    DerCoder



  • DerCoder schrieb:

    24 main.cpp expected primary-expression before '{' token
    

    Ich möchte nicht unbedingt vorher ein 2d-Array initialisieren und das übergeben.

    Das musst du aber wohl oder übel.



  • Hm okay das ist blöd... Danke



  • Wo ist denn da ein 2d - Array?
    Wenn Du wirklich nur ein Array mit zwei int - Werten an Deine Funktion übergeben willst, aber beim Aufrufer gar kein Array hast, warum übergibst Du dann nicht zwei einzelne int - Werte?



  • So wie du das geschrieben hast hat das ja kein sinn

    funktion(100, 200);
    

    Das ist ja mehr arbeit 😃

    funktion({100, 200});
    

    viel einfacher geht es doch so

    int array[20];
    array[1]=100;
    array[2]=200;
    Funktion(array[1], array[2]);
    
    void Funktion(int P1, int P2)
    {
        cout << P1 << "\t" << P2 << "\n";
    }
    


  • Conflict schrieb:

    ...
    
    Funktion(array[1], array[2]);
          
    ...
    

    und das kompiliert?

    btw.:
    Er möchte vorher eben kein Array initialisieren und das übergeben, deshalb reduziert sich das ganze auf:

    void Funktion(int P1, int P2)
    {
        cout << P1 << "\t" << P2 << "\n";
    }    
    
    int main()
    {
       ...
    
       Funktion(100, 200);
    
       ...
    }
    


  • Belli schrieb:

    Conflict schrieb:

    ...
    
    Funktion(array[1], array[2]);
          
    ...
    

    und das kompiliert?

    Warum sollte es das nicht? Welche Bedenken hast du diesbezüglich denn?



  • void   func( int *_parrayA, size_t _arrayA, int * _parrayB, size_t _arrayB )
    {
        _parrayA[ 1234 ] = TRUE;
    }
    
    int main()
    {
    int arrayA[50];
    int arrayB[50];
    
    func( arrayA, 50, arrayB, 50 );
    return FALSE;
    }
    

    Kleinere Beispiele zur Verdeutlichung und um zu zeigen was alles so geht:

    inet arrayB[50]...
    
    arrayB = pointer zur arraybase
    arrayB[0] = ganznormal int (so wie int i zB)
    &array[0] = pointer zur arraybase
    *arrayB = dass selbe wie array[0]
    *arrayB +( sizeof( INT )*5 ) = dass selbe wie array[5]
    


  • &array[0]
    

    undefiniert 😞



  • *arrayB +( sizeof( INT )*5 ) = dass selbe wie array[5]

    ne



  • Kindergartenniveau. 😮



  • _-- schrieb:

    &array[0]
    

    undefiniert 😞

    perfekt definiert. aber sowas von.



  • Bei einer Position würde ich einfach ein struct nehmen.

    struct Position
    {
     int x;
     int y;
    
     Position(int x_, int y_) : x(x_), y(y_) 
     { 
     }
    };
    
    // Im Programm dann
    Func(Position(1, 1));
    


  • inter2k3 schrieb:

    Belli schrieb:

    Conflict schrieb:

    ...
    
    Funktion(array[1], array[2]);
          
    ...
    

    und das kompiliert?

    Warum sollte es das nicht? Welche Bedenken hast du diesbezüglich denn?

    In dem Kontext, wie es codiert ist, sieht es aus wie eine Funktionsdeklaration.



  • Für eine Funktionsdeklaration fehlen aber die Typen. Somit kann es keine Funktionsdeklaration sein. Es handelt sich um einen Funktionsaufruf. Zunächst wird das Array befüllt und anschließend werden die Elemente an Index 1 und 2 übergeben.

    Das Vorgehen ist allerdings sinnlos, da man sich das Füllen des Arrays hätte sparen können, aber es schien ja auch nicht ernst gemeint zu sein. Der Autor wollte wohl nur darauf hinweisen, dass der Weg über ein Array unnötig umständlich ist.


Anmelden zum Antworten