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: