A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalon Előző változat Következő változat | Előző változat | ||
tanszek:oktatas:szamitastechnika:mutatok_pointerek [2023/10/03 16:50] knehez |
tanszek:oktatas:szamitastechnika:mutatok_pointerek [2023/11/14 11:10] (aktuális) knehez [Dereferencia] |
||
---|---|---|---|
Sor 1: | Sor 1: | ||
+ | ==== Pointerek a C nyelvben ==== | ||
+ | |||
+ | A pointer a C nyelv egyik kulcsfontosságú fogalma, amely lehetővé teszi a programozók számára, hogy közvetlenül kezeljék/elérjék a memóriát. Más nyelvekben a memória közvetlenül "elérhetetlen" (pl. Java, C#, JavaScript, Python). | ||
+ | |||
+ | A **pointer** //egy memóriacímre mutató változó//, ami lehetővé teszi, hogy közvetlenül hivatkozzunk egy adott memóriaterületre. | ||
+ | |||
+ | ==== Pointer Deklaráció ==== | ||
+ | |||
+ | A pointer deklarációja hasonló a változók deklarációjához, de a típusát is meg kell adni, és a név elé egy **csillagot** írunk. | ||
+ | |||
+ | Például: ha a pointer egy egész szám memóriacímére mutató pointer: | ||
+ | |||
+ | <code c> | ||
+ | int *pointer; | ||
+ | </code> | ||
+ | |||
+ | ==== Pointer inicializálás ==== | ||
+ | |||
+ | A pointer inicializálása a memóriacímmel történik. Például: | ||
+ | <code c> | ||
+ | int variable = 10; | ||
+ | int *pointer = &variable; | ||
+ | </code> | ||
+ | Most a pointer változó a 'variable' memóriacímére mutat. | ||
+ | |||
+ | ==== Dereferencia ==== | ||
+ | |||
+ | A 'dereferenciálás' segítségével elérhetjük a pointer által mutatott értéket. Például: | ||
+ | <code c> | ||
+ | int value = *pointer; | ||
+ | </code> | ||
+ | |||
+ | Most a //value// változó azon értéket tartalmazza, amelyre a //pointer// mutat. | ||
+ | |||
**Feladat 1:** Definiáljunk egy változót és írassuk ki azt a címet, ahol éppen tárolva van a memóriában. | **Feladat 1:** Definiáljunk egy változót és írassuk ki azt a címet, ahol éppen tárolva van a memóriában. | ||
Sor 119: | Sor 153: | ||
</sxh> | </sxh> | ||
- | Látva a kódot, ha tegyük fel 8db bármilyen karaktert ütünk be, akkor is rendszergazdák leszünk. Magyarázzuk meg miért? (azért, mert a scanf felülírja a memóriát és a "helyes" érték 0-ja felülíródik. Ezt nevezzük "buffer túlcsordulásos" támadásnak. | + | Látva a kódot, ha tegyük fel 5db bármilyen karaktert ütünk be, akkor is rendszergazdák leszünk. (érdemes kikísérletezni hány darab leütés kell, hogy elromoljon a működés) Magyarázzuk meg miért? (azért, mert a scanf felülírja a memóriát és a "helyes" érték 0-ja felülíródik. Ezt nevezzük "buffer túlcsordulásos" támadásnak. |