Cum să treci un matrice la o funcție și să o dai înapoi în stivă în rusă

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

De asemenea, acest cod nu ia în considerare dimensiunea matricei (ciclul rulează strict de trei ori), ceea ce poate duce la următoarele:

  • dacă lungimea matricei de intrare este mai mare de 3: vor fi procesate numai primele trei elemente ale matricei;
  • dacă lungimea matricei de intrare este mai mică de 3: programul va cădea cu un accident și o eroare de acces la 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 acelasi C ++, dammit, asa ca in loc de standardul sishnyh arrays sa profite de acele containere care ofera STL patrie:

  • std :: vector o astfel de "matrice" cu o dimensiune variabilă;
  • std :: matrice o serie de dimensiuni fixe.

Acum putem folosi iteratori, bazate pe gama de buclă (începând cu C ++ 11) și alte lucruri:

Nu este un expert în C ++, dar pot spune că nu treceți o matrice, dar treceți un pointer la primul său element. În acest caz, nu lucrați cu o copie locală a matricei, ci cu 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 schimbați funcția de trabuc:

Rețineți că tipul întoarcere int * este un pointer la int.

Un pointer este trecut la matrice și lucrul se face direct cu el, prin urmare, nu este necesar să se întoarcă, de exemplu: