Keresés

Új hozzászólás Aktív témák

  • zka67

    őstag

    válasz Jester01 #5552 üzenetére

    Szia,

    Ezzel együtt az eredeti kiindulás az volt, hogy az & operátor nem egy számot ad vissza, hanem egy megfelelő típusú pointert. Emiatt aztán (int)&x + 1 és (int)(&x + 1) az nem ugyanaz (kivéve ha véletlenül x mérete 1 byte)

    Mint említettem, fizikailag a pointer egy (memória)címet tartalmaz, ami egy egyszerű szám (ez lehet 16, 32 vagy akár 64 bites érték is, rendszertől függően, de ebbe most ne menjünk bele). A pointer típusát a fordító kezeli, magából a pointer értékéből ez nem derül ki, mivel nem tárolja azt.

    Az eredeti kérdés az az volt, hogy a pointer elé miért nem kell a & jel, ezt próbáltam meg konyhanyelven elmagyarázni a kérdezőnek, hogy megértse.

    int main(int argc, char* argv[])
    {
    char c;
    char *p;
    p = &c;

    printf("sizeof(c)=%d, sizeof(p)=%d, p=%08X\r\n", sizeof(c), sizeof(p), p);

    return 0;
    }

    Ennek az eredménye az alábbi:
    sizeof(c)=1, sizeof(p)=4, p=0018FF53

    azaz a c változó a 0x0018FF53-as memóriacímen található. Nincs a p változóban semmilyen típus, csak a változó címe.

Új hozzászólás Aktív témák