# Structuri (struct) în C++

> Pagina: https://bacalaurescu.ro/informatica/lectii/structuri-de-date/struct-in-cpp
> Markdown: https://bacalaurescu.ro/informatica/lectii/structuri-de-date/struct-in-cpp.md
> Sursa: Bacalaurescu (bacalaurescu.ro), conținut gratuit pentru BAC 2027.

Materia: [Informatică](https://bacalaurescu.ro/informatica)

Capitolul: [Structuri (struct)](https://bacalaurescu.ro/informatica/lectii/structuri-de-date)
Actualizat: 2026-11-01

Definirea tipurilor struct, accesarea câmpurilor și vectori de structuri.

## Pe scurt pentru BAC

- `struct` grupează date de tipuri diferite într-un singur tip nou, de exemplu un `Elev` cu `nume` și `nota`.
- Câmpurile se accesează cu operatorul punct, iar într-un vector de structuri scrii `v[i].nota`.
- La catalogul cu n elevi reții indicele `imax` al celui cu nota cea mai mare și afișezi la final `v[imax].nume`.
- Un câmp poate fi el însuși o structură, iar accesul se face în lanț, ca la `e.nastere.an`.

## Definirea unei structuri

`struct` grupează date de tipuri diferite într-un singur tip nou:

```cpp
struct Elev {
    char nume[21];
    int nota;
};
Elev e;
```

Accesarea câmpurilor se face cu operatorul PUNCT: `e.nota = 9;`, `strcpy(e.nume, "Ana");`.

## Vectori de structuri

Tiparul de BAC: catalogul cu n elevi.

```cpp
#include <iostream>
#include <cstring>
using namespace std;
struct Elev { char nume[21]; int nota; };
int main() {
    Elev v[100];
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> v[i].nume >> v[i].nota;
    int imax = 0;
    for (int i = 1; i < n; i++)
        if (v[i].nota > v[imax].nota) imax = i;
    cout << v[imax].nume;
    return 0;
}
```

Pentru intrarea `3`, `Ana 9`, `Dan 10`, `Ioana 8`, programul afișează `Dan`.

## Structuri imbricate

Un câmp poate fi el însuși o structură:

```cpp
struct Data { int zi, luna, an; };
struct Elev { char nume[21]; Data nastere; };
Elev e;
e.nastere.an = 2008;
```

Accesarea se face în lanț: `e.nastere.an`.

> [!RETINE]
> Punct pentru variabile obișnuite (e.nota); săgeată -> doar pentru pointeri la structuri (p->nota), rar cerută la BAC.

## Greșeli frecvente

1. Nu uita punctul și virgula DUPĂ acolada de închidere a struct-ului.
2. Șirurile din structuri se copiază cu strcpy, nu cu =.
3. Compararea a două structuri întregi cu == nu e permisă: compari câmp cu câmp.
