Faptul că funcția C ++ doar un pointer (sau de referință), puteți trece o matrice, respectiv, va lucra întotdeauna cu matrice sursă, și nu o copie a acesteia (și returnează un pointer la matrice original):
Deoarece acest cod nu ia în considerare dimensiunea de matrice (Ciclul trece strict de trei ori), ceea ce poate duce la următoarele:
- În cazul în care matricea de intrare este mai mare de 3: vor fi procesate doar primele trei elemente ale șirului;
- În cazul în care lungimea matrice de intrare este mai mică de 3: Programul va scădea cu o eroare de acces accident și memorie.
Problema cu dimensiunea poate fi rezolvată în două moduri: funcția de transfer în mărime plus de matrice sau a trece o matrice de referință (dacă treci o matrice de referință, o eroare pe care le-ați transferat sau a revenit la o serie de dimensiunea greșit să fie detectată la compilare):
Pentru a reveni o nouă matrice va avea doar în funcția de a aloca memorie pentru noua matrice și returnează un pointer la acesta (lucrul cel mai important, atunci nu uitați pentru a șterge memoria):
Dar avem aceeași C ++, iad, așa că merită în loc de matrice sishnyh standard, să profite de containere oferite STL Patriei:
- std :: vector
astfel de „matrice“, cu o dimensiune variabilă; - std :: matrice
o matrice de dimensiune fixă.
Acum putem folosi iterators,-Range pe bază de buclă (începând cu C ++ 11) și alte delicii:
Nu sunt un expert în C ++, dar pot să spun că nu treci o matrice și trece Funk pointer la primul element. În acest caz, nu lucrați cu o copie locală a matrice și indicatorul acesteia.
În cazul în care funcția de activitate int func (int Array []) este de a modifica „matrice a trecut,“ nu sunteți sigur că vin înapoi, dar dacă într-adevăr doresc cu adevărat ceva să se întoarcă la locul de asteptare (în acest caz, este lipsită de sens) - este necesar siganaturu schimba funcția:
Rețineți că tipul de retur int * este un pointer la int.
A trecut un pointer la matrice, iar activitatea se desfășoară în mod direct cu el, prin urmare, nu face neapărat o întoarcere, de exemplu: