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:

Kapcsolódó cikkek