Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Intrebare despre pointeri  (Citit de 1615 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Maest
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« : 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;
x=50;
y=100;
invert(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? Very Happy

Lucrez in C++, compilator Borland.
Memorat
byndrsn
Client obisnuit
**

Karma: 19
Deconectat Deconectat

Mesaje: 72



Vezi Profilul
« Răspunde #1 : 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..
« Ultima modificare: Octombrie 25, 2006, 03:24:24 de către byndrsn » Memorat
Maest
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #2 : Octombrie 25, 2006, 20:14:33 »

Ahaa... Adica, pentru int& p1, p1 e echivalent cu *p2, unde p2 e int*. Frumos, frumos. Mersi.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines