Negde sam pročitao da su reference u stvari pointeri sa oganičenjima,odnosno uvek moraju da pokazaju na nešto, dok to kod pointera nije slučaj. Može li neko navesti i ostale razlike,po mogućnosti sa primerima?
Razlika izmedju referenci i pointera
Zaključano
Zakačeno
Code:
//initcijalizacija pointera
int i = 5 ;
int* pt = &i ;
// inicijalizacija referenci
int i = 6;
int& rf = i ;
int* pt ; //dozvoljeno
int& rf ; // compile-error - nedozvolljeno (mora da pokazuje na neku promenljivu)
pt++; // inkrement adrese pointera (pristupas direktno adresi pointera u memoriji)
rf++; // inkrement vrednosti reference (pristuipas samo vrednosti koji drzi referenca)
int y = *pt ; dobijanje vrednosti iz pointera
int z = rf ; dobijanje vrednosti reference
//i ako i referenca i pointer pokazuju na neku adresu nije dozvoljeno
int* p = new int ;
int& n = p ; //compile-error
//initcijalizacija pointera
int i = 5 ;
int* pt = &i ;
// inicijalizacija referenci
int i = 6;
int& rf = i ;
int* pt ; //dozvoljeno
int& rf ; // compile-error - nedozvolljeno (mora da pokazuje na neku promenljivu)
pt++; // inkrement adrese pointera (pristupas direktno adresi pointera u memoriji)
rf++; // inkrement vrednosti reference (pristuipas samo vrednosti koji drzi referenca)
int y = *pt ; dobijanje vrednosti iz pointera
int z = rf ; dobijanje vrednosti reference
//i ako i referenca i pointer pokazuju na neku adresu nije dozvoljeno
int* p = new int ;
int& n = p ; //compile-error
Potpis
Viva lollapalooza
Pošto se ovo pitanje često javlja, evo da prekucam i formatizujem jednu tabelu iz knjige Dragana Milićeva.
********************************************************************************
Svojstvo Pokazivač Referenca
********************************************************************************
--------------------------------------------------------------------------------
S L I Č N O S T I
--------------------------------------------------------------------------------
Pristup do objekta je Ukazuje na objekat Upućuje na objekat
posredan
--------------------------------------------------------------------------------
Deklarišu se analogno T* T&
--------------------------------------------------------------------------------
Iste konverzije vezane za Pokazivač na izvedenu Referenca na izvedenu
nasleđivanje klasu u pokazivač na klasu u referencu na
osnovnu klasu osnovnu klasu
--------------------------------------------------------------------------------
Realizuju se tako što Inicijalizacija i pri inicijalizaciji
sadrže adresu objekta dodela, operator & objektom
--------------------------------------------------------------------------------
R A Z L I K E
--------------------------------------------------------------------------------
Pristup do objekta je Operator * Ne zahteva operator
posredan
--------------------------------------------------------------------------------
Objekat Pokazivač jeste objekat Referenca nije pravi
objekat (prve klase)
--------------------------------------------------------------------------------
Vezanost za objekat Može se preusmeriti Trajno vezana za
objekat
--------------------------------------------------------------------------------
Vezanost za postojeći Može da pokazuje ni na uvek upućuje na neki
objekat šta (null-pokazivač) objekat
--------------------------------------------------------------------------------
Ograničenja - ne postoji -pokazivač na referencu -referenca na referencu
-niz referenci
-referenca na void
-dinamička referenca
-pokazivač na referencu
--------------------------------------------------------------------------------
hvala vam obojici..
ono što mene zaista buni svo vreme je razlika izmedju 'Ukazuje na objekat' i 'Upućuje na objekat'
ono što mene zaista buni svo vreme je razlika izmedju 'Ukazuje na objekat' i 'Upućuje na objekat'
Na osnovu pokazivača indirektno pristupamo nekom objektu, pokazivač je promjenjljiva koja sadrži adresu objekta na koji pokazuje.
("Ukazuje na objekat")
Referenca radi direktno sa objektom, u sustini predstavlja samo drugo ime za isti objekat ("Upućuje na objekat").
("Ukazuje na objekat")
Referenca radi direktno sa objektom, u sustini predstavlja samo drugo ime za isti objekat ("Upućuje na objekat").
Potpis
if (argc > 1 && strcmp(argv[1], "-advice") == 0) {
printf("Don't Panic!n");
exit(42);
}
printf("Don't Panic!n");
exit(42);
}
uh, mnogo dobro objašnjenje, hvala!
Uvođenjem reference samo dodaješ još jedno ime za već postojeću varijablu.