Treceți o matrice statică bidimensională la o suprapunere de funcții - stivă în limba rusă

Există o problemă în transferarea unei matrice statice bidimensionale la o funcție

S-a încercat să se transfere pur și simplu ca int ** array int A [3] [4]; transp (A, 3, 4);

[Error] nu poate converti "int (*) [3]" la "int **"







  1. Cum să treci corect o matrice statică unei funcții. Funcția trebuie să accepte și matrice dinamice. Suprasolicitarea, șabloanele și STL nu sunt oferite.
  2. Antenele statice 2D sunt stocate liniar în memorie. Dinamice sunt, de asemenea, stocate liniar sau nu?
  3. Care este relația dintre o matrice statică 2D cu indicii?

presetate 6 noiembrie '15 la 18:53

Dacă aveți o matrice declarată ca

funcția non-șablon care ia o matrice dată ca argument poate părea, de exemplu, ca

și apelați ca

Sau puteți să vă declarați așa

Referitor la această funcție

atunci nu poți transfera un tablou declarat ca

Asta înseamnă că poți transfera folosind diferite trucuri, dar cel mai probabil funcția nu va funcționa așa cum te aștepți.

Există o astfel de abordare universală. Aceasta este de a interpreta orice matrice bidimensională ca dimensiune unidimensională și de a trece valori de dimensiune fiecărei dimensiuni a matricei.







Iată programul demo

Ieșirea lui în consola

Dacă scrieți un program în C în loc de C ++, atunci există matrice de lungime variabilă, și astfel ar fi mai ușor pentru dvs.

În C ++ pentru aceste scopuri este mai bine să folosiți vectorul std :: class standard

În ceea ce privește întrebarea dvs.

2) Matricele statice 2D sunt stocate liniar în memorie. Dinamice sunt, de asemenea, stocate liniar sau nu?

atunci dacă îl alocați în memorie ca o matrice bidimensională, atunci, firește, elementele sale vor fi stocate liniar în rânduri. De exemplu

Și pentru această problemă

3) Ce legătură are o matrice statică 2D cu indicii?

atunci orice matrice din expresii (cu rare excepții) este convertită implicit într-un pointer la primul său element.

În gcc, este destul de simplu.

Puteți trece în funcția de dimensiune a matricei (numai cele "inferioare" sunt suficiente) și se referă la elementele pe indici în mod natural. De exemplu:

Iată un exemplu de fișier în care sunt prezentate ambele versiuni ale programului și rezultatele lansării acestuia:

Dacă aveți încă întrebări, întrebați.

Iată o opțiune cu indicii pentru șirurile unei matrice "dense".

Ia matrice statică, ceea ce face o serie de indicii, trece-l la funcția transpusa care face haldei matrice „dens“ transpus și returnează o nouă serie de indicii pentru a liniei sale.

Ei bine, memorie înainte de eliberare, voi liberi?







Trimiteți-le prietenilor: