Egy C programozótanonc problémája a mutatókkal
2005-11-17T18:37:36+01:00
2005-11-17T20:10:14+01:00
2022-07-19T06:53:02+02:00

  • a következő kifejezések ugyanazt jelentik:

    a[8]=33; <--> *(a+8)=33;
    a[0]=12; <--> *a=12;


    Sőt ez is jó:

    8[a] <--> a[8] <--> *(a+8)

    Az egykori C tanárom ezt direkt kiemelte.
    Mutasd a teljes hozzászólást!
  • A pointerek (void*,int*,char*,...), egy címet tárolnak (asszem a legtöbb gépen 4 bájton), szóval a pointerek értéke végülis egy memóriacím.


    int *p=NULL;

    Itt deklarálom a p pointert, a kezdőértékét NULL-ra állítom, ezt célszerű mindig megtenni, azt jelenti, hogy még ne mutasson sehova, különben kezdetben valami kiszámíthatatlan helyre mutat.
    Mivel (int*) a típusa csak egy int típusú adat címét adhatom át neki


    int a=5;;
    double b;

    p=&a; // '&a' jelenti 'a' címét
    !!p=&b;!! //ilyet nem lehet

    /* '*p' jelenti a 'p'-ben tárolt címen lévő adatot, '*p' típusa:(int) */
    pl: printf("%d\n",*p);
    *p=6; /*a 'p' címen levő (int)értéket 6-ra állítja*/

    Egy kis érdekesség:
    Ha van egy
    int tomb[20]; tömbünk, akkor a tömb azonosítója('tomb') is egy pointer, ami egy (int) típusú adatra mutat


    --------------------------------------
    dinamikus memóriakezelés:

    int *a=NULL;
    a=(int*)malloc(10*sizeof(int));

    itt lefoglaltunk egy, akkora memóriaterületet(malloc), amibe belefér 10 db int típusú adat, majd ennek a memóriaterületnek a kezdőcímét átadtuk 'a'-nak
    ( malloc(lefoglalandó terület mérete bájtokban) )
    a malloc visszatérési értéke (void*), de nekünk ezt át kell konvertálni (int*)-ra
    (ha nem sikerül lefoglalni a memóriaterületet a malloc NULL-lal tér vissza)

    a következő kifejezések ugyanazt jelentik:

    a[8]=33; <--> *(a+8)=33;
    a[0]=12; <--> *a=12;

    használat után a lefoglalt memória területet fel kell szabadítani:

    free(a);

    ez így egyszerre, egy picit sok, de az előző példa elég jól leírja a pointerek lényegét
    Mutasd a teljes hozzászólást!
  • a mutatókra nagy szükség van a c-ben?


    A mutatók arra (is) jók, hogy "megjegyezzenek" helyeket. Hogy ne kelljen keresgélni. Mert az újra és újra keresgélés kárbament processzor idő.
    Mutasd a teljes hozzászólást!
  • megnézem hogy mi van írva az egyes fiókban lévő cetlire :) mert időközben átírták. hmm. még az is lehet hogy meg fogom érteni. a mutatókra nagy szükség van a c-ben?
    Mutasd a teljes hozzászólást!
  • Van egy fiókos szekrényed 8 számozott fiókkal, 1-től 8-ig.

    A 6-osba beleteszed a zseblámpát, az egyesbe meg egy cetlit raksz, amire az van írva hogy '6'.

    Megmondod a családnak, hogyha átpakolják máshova a zseblámpát, nem balhézol, ha közben átjavítják az 1-es fiókban a cetlit úgy, hogy annak a fióknak a száma legyen rajta, ahol a zseblámpa van.

    Pár nap múlva elő akarod venni a zseblámpát.

    Mit fogsz csinálni?
    Mutasd a teljes hozzászólást!
  • Hello. Egy-két hónapja kezdtem el tanulni önszántamból a C nyelvet linux alatt. Pere László: programozás C nyelven című könyvéből tanulok. Az a legnagyobb problémám, hogy nem értem a mutatók lényegét és működését. A könyvben lévő példákat sem tudom értelmezni. Annyit tudok talán, hogy valami memóriacímre hivatkozhatok a mutatók segítségével. Kérem, aki ezt olvassa és ért valamilyen szinten a C-hez segítsen! Előre is köszönöm
    Mutasd a teljes hozzászólást!
abcd