struct - Tipul înregistrare
O înregistrare este o structură neomogenă de date care definește o listă de variabile grupate sub un singur bloc de memorie.
Pentru a ne imagina mai bine utilitatea unui tip de dată struct, el ne permite gruparea mai multor variabile (de tipuri diferite sau nu) sub un singur nume.
Sintaxă
Sintaxa de declarare a unei înregistrări struct este următoarea:
struct <nume> {
<tip_de_dată1> <nume_câmp1>
<tip_de_dată2> <nume_câmp2>
...
} [<listă_variabile>];
Componentele unui struct sunt:
<nume>: identificatorul structurii, pe care îl putem folosi ulterior pentru inițializarea variabilelor;<tip_de_dată>: tipurile de dată ale câmpurilor;<nume_câmp>: numele alese pentru câmpuri;<listă_variabile>: o listă opțională de variabile pe care le inițializăm odată cu declararea structurii (doar în C++!).
Exemplu de declarare
O situație comună în care ne avantajează să folosim struct este aceea când vrem să memorăm puncte într-un sistem de coordonate :
struct Punct {
float x;
float y;
} A, B[100];
Putem declara fie variabile simple struct, fie tablouri.
Accesarea câmpurilor unei structuri
Odată ce avem definită o structură, accesul la câmpurile sale se face folosind operatorul . (punct):
<nume_structura>.<nume_camp>
De exemplu, pentru a accesa coordonatele structurilor declarate mai sus:
A.x;
A.y = 2;
B[0].y;
B[50].x *= 3;
Exemplu complet
Citirea, sau afișarea câmpurilor unei structuri se face ca la variabilele simple.
#include <iostream>
using namespace std;
struct Punct {
float x;
float y;
};
int main() {
Punct A;
cin >> A.x >> A.y;
cout << "Punctul are coordonatele: (" << A.x << ", " << A.y << ")";
return 0;
}
> 4 3.45
Punctul are coordonatele: (4, 3.45)
Inițializarea câmpurilor la declarare
În C++, putem oferi valori implicite câmpurilor unei structuri încă de la momentul definirii sau inițializării unei variabile de tip struct.
struct Punct {
float x;
float y;
};
int main() {
Punct A = {3.5, 2.1}; // initializare directa
cout << "Punctul A: (" << A.x << ", " << A.y << ")";
return 0;
}
Important:
- valorile se scriu în ordine, separate prin virgulă, între acolade;
- dacă nu sunt completate toate câmpurile, cele rămase vor fi zero sau neinițializate, în funcție de context.
Declararea cu valoare implicită
Începând cu standardul C++11 (indisponibil deci în C), câmpurile din struct pot avea și ele o valoare implicită, pentru a asigna anumite valori automat după o inițializare.
struct Punct {
float x = 0.0;
float y = 0.0;
};
int main() {
Punct B; // B.x si B.y vor avea automat valoarea 0.0
cout << B.x << " " << B.y;
return 0;
}