Tipul struct

Bază~13 min6 pași

De ce contează?

Un buletin de identitate strânge la un loc date diferite despre o persoană: nume, data nașterii, adresă. Nu le ții pe foi separate — sunt un singur document. Un struct face exact asta în program: grupează date legate sub o singură „etichetă".

Ce este un struct

Un struct definește un tip nou care grupează mai multe câmpuri, posibil de tipuri diferite. În loc de trei variabile paralele, ai o singură entitate cu sens.

struct Elev {
    char nume[30];
    int varsta;
    double nota;
};      // ATENTIE: punct-si-virgula obligatoriu aici
Observația-cheie

Definiția se termină cu };. Punct-și-virgula după acolada de închidere e ușor de uitat și produce erori de compilare care arată ciudat (adesea raportate pe linia următoare).

Folosirea: operatorul punct

Accesezi un câmp cu .:

#include <iostream>
using namespace std;

struct Punct {
    int x;
    int y;
};

int main() {
    Punct p;
    p.x = 3;            // setam campul x
    p.y = 5;            // setam campul y
    cout << "Distanta de la origine la patrat: "
         << p.x * p.x + p.y * p.y << "\n";   // 34
    return 0;
}

Pentru p = (3, 5), afișează 34 (= 9 + 25).

Inițializare rapidă

Poți seta toate câmpurile deodată, în ordine:

Punct p = {3, 5};       // x = 3, y = 5
Elev e = {"Ana", 15, 9.5};
Observația-cheie

Gruparea în struct nu e doar comoditate: face codul mai clar și pregătește terenul pentru vectori de structuri (mai mulți elevi) și sortarea lor după un câmp — temele următoare.

De ce nu trei variabile separate

Cu variabile paralele (nume[], varsta, nota), când vrei „al doilea elev" trebuie să sincronizezi trei vectori. Cu un struct, un elev e o valoare — îl copiezi, îl trimiți la o funcție, îl pui într-un vector ca pe un întreg.

Complexitate

Accesul la un câmp e O(1) — direct, fără căutare. Structul nu adaugă cost de execuție; e o organizare a datelor.

Greșeli frecvente

Capcane reale la struct:

  • Uiți ; după }: definiția structului se termină cu };. Lipsa lui dă erori derutante.
  • Confuzi . cu ->: pentru o variabilă folosești p.x; -> e doar pentru pointeri la struct.
  • Câmpuri neinițializate: ca la orice variabilă, un câmp necitit conține gunoi. Inițializează înainte de folosire.
  • Copii nedorite: atribuirea a = b copiază toate câmpurile. E corect, dar la structuri mari poate fi costisitor — la nevoie transmiți prin referință.

De reținut

  • struct grupează câmpuri legate (posibil de tipuri diferite) într-un tip nou.
  • Definiția se termină cu };; accesezi câmpurile cu . (ex. elev.nota).
  • Acces O(1); pregătește vectorii de structuri și sortarea după câmp.

Întrebarea 1 / 3

La ce folosești un `struct`?