Daca este cum a spus @Dani atunci trebuia sa intrebi mai multe informatii despre platforma/compiler etc. Mai exact ce rezulta din sizeof(int)
. Daca presupui ca sizeof(int) == 4
este 0x1005
. Doar daca sizeof(int) == 2
atunci 0x1003
. Aici deja trebuie sa ma intreb cat de veche sau limitata este platforma respectiva.
Daca intradevar ai pus codul corect atunci raspunsul este 0x1002
. Pentru ca 0x1001
este defapt un numar intreg dar cu notatie hexadecimala.
int p=(int )0x1001;
este egal cu int p=4097;
pentru compiler. Defapt (int)
este inutil in contextul asta.
Un numar hexadecimal (literal) nu reprezinta neaparat un pointer in c/c++. Este doar o altfel de notatie pentru numere intregi (sau nu?). Nu neaparat adrese in memorie (tot aia). La fel si pentru notatia octala. De multe ori de ajuta sa intelegi mai bine codul. Exemplu bun este notatia binara de mai jos in cazul in care folosesti bit-flags sau ceva de genul.
Acelasi rezultat indiferent de notatie:
int b=4097; //dec
int a=0x1001; //hex
int c=010001; //oct
Acest lucru devine mult mai evident in c++14 unde ai mai multa flexibilitate:
int a=0x1001; //hex
int b=4097; //dec
int c=4'097; //pretty dec
int d=010001; //oct
int e=01'0001; //pretty oct
int f=0b0001000000000001; //bin
int g=0b0001'0000'0000'0001; //pretty bin
Toate devin acelasi lucru eventual. Este pur si simplu o notatie diferita. Cum se zice “syntax sugar”?
Si daca era sa fie pointer. Toate sunt valide. Pentru ca nu il intereseaza pe compiler ce notatie folosesti cat timp este in limitele tipului fundamental pe care il folosesti (int
in cazul asta. sau uintptr_t
daca e pointer)
Din nou. Toate fac acelasi lucru:
int *a=(int *)(0x1001); //hex
int *b=(int *)(4097); //dec
int *c=(int *)(4'097); //pretty dec
int *d=(int *)(010001); //oct
int *e=(int *)(01'0001); //pretty oct
int *f=(int *)(0b0001000000000001); //bin
int *g=(int *)(0b0001'0000'0000'0001); //pretty bin
Spre sfarsit am cam amestecat cu c++ putin. Insa te ajuta sa intelegi mai bine ca nu il intereseaza pe compiler ce notatie folosesti atata timp cat conversia este definita si nu se pierd informatii.
Parerea mea este ca era un fel de intrebare capcana. Sa vada ce crezi ca este p
. Un pointer catre un int
sau doar un int
. Ba chiar si numele p
este dat la deruta. Asta in cazul in care este corect ce ai scris tu.
Amuzanta intrebarea oricum 