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

struct Punct {
    float x;
    float y;
} A, B[100];

Putem declara fie variabile simple struct, fie tablouri.


Publicitate

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)

Publicitate

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;
}