tanszek:oktatas:szamitastechnika:mutatok_pointerek
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| tanszek:oktatas:szamitastechnika:mutatok_pointerek [2022/09/05 21:10] – létrehozva knehez | tanszek:oktatas:szamitastechnika:mutatok_pointerek [2023/11/14 11:10] (current) – [Dereferencia] knehez | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | **Feladat 1:** Definiáljunk | + | ==== 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/ | ||
| + | |||
| + | A **pointer** //egy memóriacímre mutató változó//, | ||
| + | |||
| + | ==== Pointer Deklaráció ==== | ||
| + | |||
| + | A pointer deklarációja hasonló | ||
| + | |||
| + | Például: ha a pointer egy egész szám memóriacímére mutató pointer: | ||
| <code c> | <code c> | ||
| + | int *pointer; | ||
| + | </ | ||
| + | |||
| + | ==== 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 = & | ||
| + | </ | ||
| + | Most a pointer változó a ' | ||
| + | |||
| + | ==== Dereferencia ==== | ||
| + | |||
| + | A ' | ||
| + | <code c> | ||
| + | int value = *pointer; | ||
| + | </ | ||
| + | |||
| + | Most a //value// változó azon értéket tartalmazza, | ||
| + | |||
| + | **Feladat 1:** Definiáljunk egy változót és írassuk ki azt a címet, ahol éppen tárolva van a memóriában. | ||
| + | |||
| + | <sxh c> | ||
| #include < | #include < | ||
| - | main() | + | int main() |
| { | { | ||
| int a = 12; | int a = 12; | ||
| printf(" | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| - | Megjegyzés: | + | Megjegyzés: |
| **Feladat 2:** Definiáljunk egy változót és egy erre a változóra mutató pointert. Írassuk ki a változó értékét a pointer segítségével. | **Feladat 2:** Definiáljunk egy változót és egy erre a változóra mutató pointert. Írassuk ki a változó értékét a pointer segítségével. | ||
| - | <code c> | + | <sxh c> |
| #include < | #include < | ||
| Line 24: | Line 58: | ||
| printf(" | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| **Feladat 3:** Az előző feladatban adott b pointer segítségével növeljük meg az **a** változó értékét, majd írassuk ki az **a** változót. | **Feladat 3:** Az előző feladatban adott b pointer segítségével növeljük meg az **a** változó értékét, majd írassuk ki az **a** változót. | ||
| - | <code c> | + | <sxh c> |
| #include < | #include < | ||
| Line 41: | Line 75: | ||
| printf(" | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| **Érték növelése pointeren kereszül** | **Érték növelése pointeren kereszül** | ||
| - | <code c> | + | <sxh c> |
| #include < | #include < | ||
| - | main() | + | int main() |
| { | { | ||
| int a = 10; | int a = 10; | ||
| Line 58: | Line 92: | ||
| printf(" | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| Nem lett 11 **a** értéke. Miért? Mert (*b)++ -t kellett volna írni. | Nem lett 11 **a** értéke. Miért? Mert (*b)++ -t kellett volna írni. | ||
| Line 68: | Line 102: | ||
| Hozzunk létre egy másik pointert ami az első pointerre mutat. Irjuk ki a pointerek által mutatott címen tárolt értéket! | Hozzunk létre egy másik pointert ami az első pointerre mutat. Irjuk ki a pointerek által mutatott címen tárolt értéket! | ||
| - | <code c> | + | <sxh c> |
| #include < | #include < | ||
| - | main () | + | int main () |
| { | { | ||
| int val = 10; | int val = 10; | ||
| Line 84: | Line 118: | ||
| printf(" | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| **Érdekesség: | **Érdekesség: | ||
| Line 90: | Line 124: | ||
| Az alábbi program bekér egy karaktert a felhasználótól. Ha nem c-t nyom akkor nem helyes a kódja. | Az alábbi program bekér egy karaktert a felhasználótól. Ha nem c-t nyom akkor nem helyes a kódja. | ||
| - | <code c> | + | <sxh c> |
| #include < | #include < | ||
| - | main() | + | int main() |
| { | { | ||
| char kod; | char kod; | ||
| Line 117: | Line 151: | ||
| } | } | ||
| - | </code> | + | </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 " | + | |
| + | 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 " | ||
tanszek/oktatas/szamitastechnika/mutatok_pointerek.1662412236.txt.gz · Last modified: 2022/09/05 21:10 by knehez
