PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: X Anzahl an Pointer eines Array übergeben


pajofego
2005-11-28, 23:54:26
Hallo Leute,

anscheinend habe Pointer mal wieder hochkonjunktur :biggrin:

Ich habe mir ein Array wie folgt angelegt


double **MyFeld;


dass ich wie folgt initialisiere:


MyFeld = new double*[m_iNXD];

for(int i = 0; i<m_iNXD; i++)
MyFeld[i] = new double[NU];


Jetzt habe ich eine Methode...ihr Name sei mal DoSomething, die soll aus dem Array nur eine bestimmte Anzahl von Elementen bekommen. In meinem Fall sind es genau drei Stück. Wie ist das gemeint...sei m_iNXD die Anzahl der Reihen und NU die Anzahl der Spalten, so sollen dann z.B.

MyFeld[50][0], MyFeld[50][1] ... MyFeld[52][0], MyFeld[52][1] übergeben werden.

Da ich jetzt nun eine feste Anzahl vonübergebenden Parameter habe, habe ich die Sache wie folgt gelöst:


void clMyClass::StartCalc()
{
DoSomething(MyFeld[50], MyFeld[51], MyFeld[52])
}

void clMyClass::DoSomething(const double *valueMyArray1, const double *valueMyArray2, const double *valueMyArray3)
{
cout << valueMyArray1[0] << valueMyArray1[1] << endl;
cout << valueMyArray2[0] << valueMyArray2[1] << endl;
cout << valueMyArray3[0] << valueMyArray3[1] << endl;
}


O.K. das ganze sollte so funktionieren, wenn ich mich nicht vertippt habe...aber gefallen tuts mir überhaupt nicht, vor allem dann nicht, wenn ich die Anzahl der zu übergebenden Arrayparamater größer drei sein sollte. Könntet ihr mir da weiterhelfen und mir sagen wie ich das eleganter lösen könnte, ohne explizit drei Parameter in DoSomething definieren zu müssen?

Danke,

Gruß

pajofego

Neomi
2005-11-29, 00:12:48
void clMyClass::StartCalc ()
{
DoSomething (MyFeld + 50);
// DoSomething (&MyFeld [50]); // Variante 2
}

void clMyClass::DoSomething (const double ** valueMyArray)
{
cout << valueMyArray [0][0] << valueMyArray [0][1] << endl;
cout << valueMyArray [1][0] << valueMyArray [1][1] << endl;
cout << valueMyArray [2][0] << valueMyArray [2][1] << endl;
}

Natürlich nur, wenn der zweite Index immer bei 0 beginnen soll.

pajofego
2005-11-29, 00:18:16
Stimmt....

Mensch ich bin ja bedeppert...ist wohl schon wieder zu spät (Variante zwei kommt mir aus der Vorlesung her bekannt vor)!

Die erste finde ich cool, habe ich so noch nie gesehen...

Danke!

Gruß

pajofego

pajofego
2005-11-29, 22:16:04
void clMyClass::StartCalc ()
{
DoSomething (MyFeld + 50);
// DoSomething (&MyFeld [50]); // Variante 2
}

void clMyClass::DoSomething (const double ** valueMyArray)
{
cout << valueMyArray [0][0] << valueMyArray [0][1] << endl;
cout << valueMyArray [1][0] << valueMyArray [1][1] << endl;
cout << valueMyArray [2][0] << valueMyArray [2][1] << endl;
}

Natürlich nur, wenn der zweite Index immer bei 0 beginnen soll.

Kurze Verständnisfrage noch zu obigen Code:

Ich musste const in der Methode DoSomething entfernen, damit ich es kompilieren kann! Kann mir einer erklären warum?

Danke,

Gruß

pajofego