Übergabe eines Arrays an eine Funktion

Hi, es gibt mehrere Möglichkeiten ein 2 dimensionales Array zu übergeben:
Die ersten 2:

Code:
void foo2(int* pointer, int xSize, int ySize){

        for(int i = 0; i < xSize; i++) 
                for(int j = 0; j < ySize; j++) 
                        pointer[xSize*i + j] = 0;
}

void foo1(int array[][2], int xSize){

        for(int i = 0; i < xSize; i++) 
                for(int j = 0; j < 2;  j++)
                        array[i][j] = 0;
}

Aufruf:

Code:
foo1(array, XSIZE);
foo2(&array[0][0], XSIZE, YSIZE);

Wobei alle zwei Möglichkeiten recht unsauber sind da sie nicht dynamisch genug sind,
da der Funktion immer alle 2 Größen des Arrays mit bekannt gemacht werden müssen.
Noch schlimmer in der Funktion foo1(), bei welcher die 2 Dimension immer statisch ist.

Eine Möglichkeit die Funktion dynamischer zu machen in dem das zu übergebende
Objekt die Größe schon implizit als Information mitträgt bietet dir z.B. die STL und die
Klasse std::vector:

Code:
#include <vector>

using namespace std;

void foo(vector<vector<int> >& array){ /** call by reference um Veränderungen am array vornehmen zu können */

        for(int i = 0; i < array.size(); i++)
                for(int j = 0; j < array[i].size(); j++){
                        array[i][j] = 0;
}

Möglicher Anwendungsfall der Funktion:



Code:
int main(void){

        vector<vector<int> > test;

        for(int i = 0; i < 5; i++){
                test.push_back(vector<int>());
                for(int j = 0; j < 2; j++)
                        test[i].push_back(1);
        }
        foo(test);
        /** jetzt ist test mit 0en anstatt mit 1en gefuellt */
        return 0;
}

Gruß

RedWing
 
Zuletzt bearbeitet:
Zurück