Dinamikus memóriakezelés

Pointerek (ismétlés)

Pointereket használunk memóriacím tárolására

    `*` - dereference (pointeren keresztüli változóelérés)
    `&` - address-of (adott változó címe)

Példa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;

int main()
{
    int i = 20;
    int j = 30;

    int *p = &i; // p-be kerül az i címe
    *p = 5;
    cout << *p << " " << i << endl; // 5 5

    p = &j;
    cout << i << " " << *p << endl; // 5 30
    cout << p << " " << &j << endl; // a j memóriacíme

    return 0;
}

A new és delete operátorok

Szintaxis

Egy objektum lefoglalása:

    int  *p1 = new int;  // lefoglal egy int-nek 4B-ot
    *p1 = 2;
    ...
    delete p1;

Vagy struktúrákra:

    Diak *p2 = new Diak; // az előző feladatból a struct
    (*p2).hianyzasok = 4;
    p2->hianyzasok = 4; // az előző rövidítése
    ...
    delete p2;

Több objektumnak való helyfoglalás:

    int n; // egy sorozat hossza
    cin >> n;

    int *p = new int[n];
    p[0] = 5;
    p[1] = 3;
    ...
    p[n-1] = 0;

    delete[] p;

Példa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    int *p = new int[n];

    for (int i = 0; i < n; i++)
        cin >> p[i];

    for (int i = n-1; i >= 0; i--)
        cout << p[i] << " ";
    cout << endl;

    delete[] p;

    return 0;
}