Hogyan át egy tömb a funkciót, és küldje vissza a verem túlcsordulás orosz
Az a tény, hogy a C ++ függvény csak egy mutató (vagy referencia) akkor át egy tömb, illetve akkor mindig működni a forrás tömbben, és nem egy-egy példányt (és vissza a mutató az eredeti tömb):
Mivel ez a kód nem veszi figyelembe a méret a tömb (Ciklus átmegy szigorúan háromszor), ami ahhoz vezethet, hogy a következő:
- Ha az input tömb hosszabb, mint 3: feldolgozott lesz csak az első három elem a tömbben;
- Ha az input tömb hossza kevesebb, mint 3: A program fog esni egy összeomlás és a memória-hozzáférési hiba.
A probléma a méret lehet oldani két módja van: átviteli függvény mellett a tömb méretét, vagy át a tömböt referencia (ha átmegy a tömböt referencia, egy hiba, hogy már át, vagy vissza kell egy tömböt a megfelelő méretű, hogy kimutatható fordításkor):
Visszaadja a tömb lesz csak a funkció a memóriát az új tömb, és visszatér egy mutatót hozzá (a lényeg, akkor ne felejtsük el, hogy törölje a memóriát):
De mi van egyforma C ++, a pokol, ezért érdemes helyett a szabványos sishnyh tömbök kihasználják a konténerek kínált STL Homeland:
- std :: vector
ilyen „array” egy változó méretű; - std :: tömb
egy sor rögzített mérettel.
Most már tudjuk használni iterátorokat tartomány alapú hurok (kezdve a C ++ 11), és egyéb finomságokat:
Nem szakértője a C ++, de azt lehet mondani, hogy nem adja át egy tömb, és adja át Funk mutatót az első elemet. Ebben az esetben, ha nem dolgozik, a helyi másolatot a tömb és a mutatót.
Ha a feladat függvényében int Func (int Array []), hogy módosítsa a „telt tömb”, akkor nem biztos, hogy jöjjön vissza, de ha tényleg igazán akar valamit, hogy visszatérjen a hívó helyét (ebben az esetben értelmetlen) - szükség van siganaturu változik funkció:
Megjegyezzük, hogy a visszatérési típus int * egy mutató int.
Telt egy mutató a tömb és a munkát végzik közvetlenül vele, ezért nem feltétlenül teszi a visszatérést, például: