Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

Programozás II.

2. gyakorlat
- Szuszik Csanád -
Mutatók - Pointerek
Mutatók - Pointerek
• A mutató is egy változó típus (mint az int, float, double…)

• Mint minden változó, a mutatók is rendelkeznek típussal, értékkel,


címmel és névvel

• Értékük a számítógép memóriablokkjainak egy-egy címe lehet

• Általában egy adott változó címét adjuk meg nekik értéknek

• Vannak altípusok: egész számra mutató mutató, valós számra mutató


mutató, karakterre mutató mutató, fájlra mutató mutató…

FILE *in = fopen(“in.txt”,”r”);


Mutatók - Pointerek
FILE *in = fopen(“in.txt”,”r”);

• Mutató deklarálása: típus *név;

• Például: int *p; (ekkor a p nevű mutató int típusú változókra


/ egész számokra tud mutatni)

• Mutató kinullázása: p = NULL; (szokás az ilyen mutatót “sehova


sem mutató mutatónak” hívni, mivel a 0-s tárcímen speciálisan nem
helyezkedhet el információ)

• A mutatók értéke általában nem releváns, gyakoribb, hogy a mutatók


által mutatott változók értékére vagyunk kíváncsiak
Példa
int *p1, a;
int **p2;
a = 5;
p1 = &a;
p2 = &p1;

• A * karakter nem a típushoz, hanem a változóhoz tartozik, így egy sorban


deklarálhatunk mutatókat, és nem mutatókat is egyszerre

• A ** karakter egy újabb altípusát jelöli a mutatóknak: mutatóra mutató


mutató

• p1 = &a; (a p1 mutató értékül megkapja az a változó memóriacímét)

• p2 = &p1; (a p2 mutató értékül megkapja a p1 mutató memóriacímét)


Memória operátorok
& *
Memória címe operátor Memória értéke operátor

int a=0, *p1;


p1 = &a;
Kódrészlet *p1 = 4;
printf("%d %d\n", a, *p1);

Eredmény 4 4
Statikus tömbök és mutatók
int a[10];
int *p; Maga a tömb változó is
p = a;
printf("%d %d\n", a[0], p[0]);
egy mutató!

• Az eredményként kiírt két szám azonos lesz


• A p mutatón keresztül elérjük az a tömb összes elemét
• A tömb változó egy olyan mutató, ami a tömb legelső elemére mutat
• Úgy is létrehozhatunk mutatót, hogy az ne a tömb legelső elemére
mutasson: p=&a[5]; Ekkor p[0] megegyezik a[5]-el.
Új módszer a tömbök kezelésére:
*(p+2) ⟺ p[2]
Feladatmegoldás
1. Feladat
• Készítsünk szemléltető programot a mutatók működésére. A
programban szerepeljen int, int* és int** típusú változó.
• Figyeljük meg, hogy mi történik, ha egy mutató értékét
átadjuk egy másik azonos típusú mutatónak.
• Írassuk ki mutatók értékét, és mutatók által mutatott
változók értékét %d formátummal.
• Mi történik, ha kiíratjuk a *(&a) értéket?
1. Feladat megoldása
2. Feladat

Írjunk egy programot, amely a képernyőről bekér két


egész számot, majd ezt a két számot pointerek
segítségével összeadja, és kiírja a képernyőre az
eredményt.
2. Feladat megoldása
3. Feladat

Írjunk egy programot, amely generál két egész


véletlenszámot 0 és 10 között, majd mutatók
segítségével eldönti, és kiírja, hogy melyik a
nagyobb szám.
3. Feladat megoldása
4. Feladat

Írjunk egy programot, amelyben létrehozunk egy 10


elemű valós számok tárolására alkalmas tömböt,
majd töltsük fel a tömböt 0 és 1 közé eső véletlen
számokkal. Egy mutató segítségével írassuk ki a
tömb elemeit a képernyőre.
4. Feladat megoldása

You might also like