Metode pentru a accesa elementele de matrice

Deoarece denumirea matrice este un pointer permisă, de exemplu, o astfel de atribuire:

Există două moduri diferite de a accesa elementele de matrice. Prima metodă presupune utilizarea expresiilor index convenționale în paranteze, de exemplu, array [16] = 3 sau array [i + 2] = 7. Cu această metodă de acces, a înregistrat două expresii, a doua expresie este inclus între paranteze drepte. Una dintre aceste expresii trebuie să fie un pointer, iar al doilea - o expresie de tip întreg. secvență aceste expresii de înregistrare poate fi orice, dar expresia categorisit este înregistrat după al doilea. Prin urmare, matricea de înregistrare [16] și 16 [matrice] sunt echivalente și reprezintă numărul elementului matrice șaisprezece. Un cursor utilizate nu trebuie să fie o constantă, indicând un solid, acesta poate fi o variabilă în expresia index. În special, după accesul atribuire = array ptr elementul al șaisprezecelea al șirului pot fi accesate cu ajutorul pointer ptr profilat ptr [16] sau 16 [PTR].







Pentru a accesa elementul de matrice inițială (adică, elementul cu indice zero) valoare poate fi utilizată pur și simplu, sau pointer matrice ptr. Oricare dintre misiuni

atribuie o valoare inițială a elementului de matrice 2, dar atribuire cele mai executate rapid * array = 2 și * 2 = ptr, deoarece acestea nu sunt necesare pentru a efectua o operație de adăugare.

Figura 3. alocare de memorie pentru matrice bidimensional.

De exemplu, referința la arr2 elemente [1] [2] poate fi realizată prin intermediul pointer ptr2 declarat în forma int * ptr2 = arr2 [0] ca tratament ptr2 [1 * 4 + 2] (aici 1 și 2, indicii elementului utilizat, 4 și numărul de elemente într-un rând) sau ptr2 [6]. Rețineți că tratamentul arr2 vizual similare [6] nu este posibilă deoarece indicele cu indicele 6 nu există.







Pentru a accesa elementul arr3 [2] [3] [4] de matrice tridimensionale, de asemenea, mozhno folosi un pointer, descris ca float * ptr3 = arr3 [0] [0] de la o expresie de indexare în forma ptr3 [3 * 2 + 4 * 3 4] sau ptr3 [22].

Pe indicii pot efectua operații unare: creștere și decrementare. Atunci când se efectuează operații ++ și - o valoare pointer este incrementat sau decrementat cu lungimea de tipul celor menționate de indicatorul utilizat.

Operațiile binare de adunare și scădere poate participa pointer și valoarea de tip int. În cazul în care rezultatul acestei operații va fi un pointer la tipul de sursă și valoarea sa este un număr specificat de elemente este mai mare sau mai mică decât originalul.

Valorile două indicii pentru același tip poate fi comparat cu operația ==. =.> = Valorile indicii sunt considerate doar ca numere întregi, iar un rezultat de comparație este 0 (fals) sau 1 (true).

În acest exemplu, o valoare mai mică decât operatorul ptr1 ptr2 valoare și, prin urmare, o [3] = 4 nu va fi executat.

In limbajul C elementele de matrice pot fi de orice tip, și, în special, poate fi orice tip de indicii. Luați în considerare câteva exemple de utilizare pointer.

genera obiecte de program reprezentate în diagrama din figura 4.

Figura 5. Variabilele de aranjare după operație pp + = 2.

genera obiecte de program reprezentate în diagrama din figura 6.


Figura 6. Dispunerea de matrice bidimensional de indicii.

Conform acestui sistem, accesul la elementul a [0] [0] pentru a obține semnele o, p, pa cu următoarele referințe: a [0] [0], * o, ** o [0], * p, ** pa , * p [0].

Acesta poate fi reprezentat prin schema prezentată în figura 7.


Figura 7. Dispunerea de indicii la șiruri.

Cu alocarea dinamică a memoriei pentru matrice trebuie să descrie indicatorul corespunzător și îi atribuiți o valoare utilizând funcția calloc. array dimensională a [10] a elementelor de tip float pot fi create după cum urmează:

Pentru a crea o matrice bidimensională trebuie să aloce mai întâi de memorie pentru o serie de indicii pentru matrice unidimensională, și apoi aloca memorie pentru tablouri unidimensionale. Să presupunem, de exemplu, este necesară pentru a crea o matrice a [n] [m], se poate face folosind următorul fragment de program: