Van valami olvasmány amit elolvashatnék, hogy jobban megértsem a pointerek működését C-ben?
Nem az olvasás fog segíteni. Egyetemen tartok C gyakorlatot, nemrég tanítottam a pointereket, hát, nem egyszerűek, ez tény.
Ami segíthet, véleményem szerint, ha leülsz, és elkezdesz velük kísérletezni. Mi működik, mi nem, hogyan oldanád meg a különböző problémákat. Egy könyv elolvasása nem fogja megértetni veled ezeket.
Informatikai téren, tapasztalatom szerint, nagyon kevés szituáció van, amikor egy könyv tud segíteni. Általában a gyakorlás, különböző kis scriptek készítése nagyobb segítség a megértéshez.
Nem mellesleg, én is szívesen segítek, ha kérdésed van, írj nyugodtan.
"Informatikai téren, tapasztalatom szerint, nagyon kevés szituáció van, amikor egy könyv tud segíteni. "
Én azért ezt megkontráznám.
A könyv, a tankönyv alapvető célja az, amit te elvitatsz tőle.
Vannak az olvasó/tanuló számára jól, és vannak kevésbé jól fogyasztható könyvek. A tudásunk, ismereteink legjavát könyvekből merítjük. Elég a sok doksi olvasására gondolni.
A pointerek mibenlétének - azok működésének - megértéséhez a legjobb, ha hardveres oldalról tisztázzuk a dolgokat. A pointer nem más, mint egy memóriacím.
PC-s környezetben a gond általában a pointer aritmetikával szokott lenni, vagy esetenként a címszámítással.
Olyan változók amik memóriacímet tárolnak.
int x = 5
int* p = &x
Amikor definiálsz egy mutatót akkor a * jelölöd hogy ez egy mutató típusú változó lesz és nem pedig egy int változó
& ezzel pedig le tudod kérni hogy egy változó értéke hol tárolódik a memóriában.
Ha már van definiálva egy mutatód akkor:
Ez hibás mert p egy memóriacímet ad vissza míg x egy int et vár:
x = p
Ez jó mert p a memóriacímen levő int értéket adja vissza.
x = *p
* Dereference ooerátorként is használatos mutatókkal. Ki tudod nyerni vele azt az értéket ahová egy mutató a benne tárolt memóriacímmel hivatkozik.
Így már nem hibás mert p2 memóriacímet vár.
int* p2 = p
Az indexelő operátor is dereference hatással bír.
Szóval ha van egy tömböd(tömb maga is egy mutató):
int x = int[5]
int* p = &x[4]
Mivel x dereferálva lett az indexeléssel ezért kell a & ooerátor elé hogy a tömb utolsó elemének a címét ahol tárolódik kinyerjük majd tároljuk azt p mutatóban.
Szóval ezek:
int y = x[4] ez jó mert indexelés dereferál
int* y = x ez is jó mert x tömböt nincs ami dereferálja, y most x tömb első elemének a memóriacímét tárolja és mivel ez így van csinálhatsz egy ilyet is:
int* y2 = ++y Itt az y mutatót ugratod a tömb második elemét tároló címre majd hozzárendeled y2 hoz
A 4-est dobja már ki valaki.
Hányja inkább máshová a hülyeségeit.
5
Konkrétum, hogy mi nem jó az írásában?
Pl. nincs olyan, hogy "mutató tipusú változó".
Mutató (pointer) van csak, ami egy bizonyos tipusú változó címére mutat a memóriában.
"Pl. nincs olyan, hogy "mutató tipusú változó".
Mutató (pointer) van csak, ami egy bizonyos tipusú változó címére mutat a memóriában."
Én vagyok az a 4 es válaszoló.
Nem vagyok hivatásos programozó otthon önerőböl tanultam meg dolgokat. Az hogy valahol vérzik e amit írtam nem tudom,ha igen majd kijavíttotok.
Minden esetre csak segíteni akartam a kérdezőnek.
Valaki írta hogy nincs mutató típusú változó, de szerintem meg van mert maguk a pointerek is tárolódnak a memóriában saját memóriacímük is van. A változók pedig azok amikbe tárolunk egy értéket egy pointer típusú változóba pedig memóriacímet.
De javítsatok ki, most már én is kíváncsi vagyok.
int* p
int** pTop = &p
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!