|
Titlul: Intrebare despre pointeri Scris de: Panait Bogdan din Octombrie 24, 2006, 22:29:00 Dupa cum ati dedus din titlu, am o intrebare despre pointeri. De fapt, mai multe.
1) Care e diferenta dintre char* p si char& p? Pentru char* p, in p se stocheaza adresa unei variabile. Pentru char& p, presupun ca in p se stocheaza tot o adresa de memorie, nu? 2) Am vrut sa fac o functie simpla invert care sa ia doua variabile si sa le inverseze intre ele. Singurul mod prin care se poate face asa ceva este cu pointeri, la argumentele functiei, in loc sa dai niste valori stocate in variabile, dai adresele variabilei. Astfel: void invert(char& a, char& b) //adica la argumente trebuie sa ofer doua valori de tip adresa, nu? cand apelez functia in interiorul functiei main(), apelarea se face: Cod: int x, y; Si merge. Dar mi se pare ilogic, din moment ce x si y sunt echivalente cu 50 si respectiv 100. De ce acolo le ia drept adrese? Daca incer sa apelez functia asa: invert(&x, &y); adica la argumente sa fie adresele variabilelor, da eroare si spune ca nu poate face conversia. Asa ca, poate cineva sa-mi explice cum sta treaba cu pointerii? :D Lucrez in C++, compilator Borland. Titlul: Raspuns: Intrebare despre pointeri Scris de: Alina Ene din Octombrie 25, 2006, 02:56:31 .. poate imi scapa ceva.. dar confunzi cumva C++ reference cu pointer?
C++ are un tip de variabila numit "reference" care nu exista in C (in C acelasi rezultat e obtinut folosind pointeri) acest tip de variabila e folosit in parametri, de exemplu functia void invert(char&, char&) despre care intrebai.. conceptual, reference variables sunt de fapt pointers sub un alt nume, dar nu pot fi instantiate ca pointeri de catre compilator.. uite un exemplu: int x; int *p1 = &x; // pointer int &p2 = x; // reference atat p1 cat si p2 contin adresa lui x daca vrei sa atribui o valoare lui x (sa zicem 10): *p1 = 10; // adresa trebuie sa fie "dereferenced" folosind * p2 = 10; // adresa este "dereferenced" fara sa folosesti vreun operator adresele pot fi manipulate direct daca folosesti un pointer, de ex: ++ p1 (ca sa obtii urmatoarea adresa) ceea ce nu e posibil folosind reference sper ca intelegi de ce functzia aceea merge.. Titlul: Raspuns: Intrebare despre pointeri Scris de: Panait Bogdan din Octombrie 25, 2006, 20:14:33 Ahaa... Adica, pentru int& p1, p1 e echivalent cu *p2, unde p2 e int*. Frumos, frumos. Mersi.
|