Pointerek; tömb, mint pointer

Pointerek

Pl.

    int* p; - egy int-nek a memóriacímét tároló pointer

Példakód:

 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 = 123;

    int* p = &i; // & - címe operátor

    cout << *p; // * - dereference operátor 
                // (megmondja, hogy adott címen 
                // milyen érték van)
    cout << endl;
    *p = 2;
    cout << i << endl; // 2

    return 0;
}

Tömb, mint pointer

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

int main()
{
    int t[100] = {11,22,33};

    cout << t << endl; // a t változó a tömböt tároló
                       // memóriadarab kezdőcíme

    cout << t << " " << *t << endl; // 11
    cout << t+1 << " " << *(t+1) << " " << t[1] << endl; // 22
    // t[1] tulajdonképpen csak egy rövidítése a *(t+1)-nek
    // ez magyarázza, hogy miért indexeljük nullától a tömböket
    
    return 0;
}

Gyakorlat

Mit ír ki?

 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()
{
    char str[100] = "hello";

    cout << str << endl;
        // kap a cout egy memóriacímet
        // kiírja a 'h', 'e', 'l', 'l', 'o'
        // betűket, aztán megáll

    cout << str+1 << endl; // ello
    cout << str+2 << endl; // llo
         // (pointeraritmetika - számolás memóriacímekkel)

    return 0;
}