Hogyan adhat át tömböt egy függvénynek, és visszaküldi a túlcsordulást orosz nyelvre

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):

Ez a kód nem veszi figyelembe a tömb méretét (a ciklus szigorúan háromszor fut), ami az alábbiakhoz vezethet:

  • ha a bemeneti tömb hossza nagyobb, mint 3: csak a tömb első három elemét fogják feldolgozni;
  • ha a bemeneti tömb hossza kisebb, mint 3: a program összeomlik és memória hozzáférési hiba történik.

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):

Egy új tömb visszaadásához csak a függvényen belüli új tömb memóriáját kell elosztania, és vissza kell adni a mutatót (a legfontosabb dolog, akkor ne felejtsd el törölni a memóriát):

De ugyanolyan C + + -val rendelkezünk, így a standard sishnyh tömbök helyett a STL:

  • std :: vektor egy ilyen változó méretű "tömb";
  • std :: array egy fix méretű tömb.

Most használhatunk iterátorokat, a Range-based for loop-ot (kezdve C ++ 11-ből) és más dolgokat:

Nem szakértő a C ++-ban, de azt mondhatom, hogy nem adsz át egy tömböt, de mutasd a mutatót az első elemhez. Ebben az esetben nem működik a tömb helyi példányával, hanem a mutatóval.

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 változtassa meg a szivar funkciót:

Ne feledje, hogy a visszaadási típus int * egy int mutató.

A mutató átkerül a tömbhöz, és a munkát közvetlenül végezzük el, ezért nem szükséges visszatérni, például: