PDA

Visualizza la versione completa : c++ da void* a char*


Gioa32
27-02-2013, 14:56
Salve a tutti.
Ho scritto questo pezzo di codice che in pratica visualizza l'indirizzo di una variabile di tipo char, poi assegna questo indirizzo ad un puntatore a void e stampa a video tale puntatore(in pratica faccio un cast da puntatore a char a puntatore a void)



char *c = new char('a');
cout << &c <<endl;
void *p=&c;
cout << p << endl;



Ma se volessi fare la cosa opposta, ovvero convertire un puntatore a void in un puntatore a char e stampare il valore di questo puntatore? Come dovrei fare? Grazie a tutti.

MItaly
27-02-2013, 15:06
Con un cast.


char *c2=(char *)p;

o anche direttamente


cout<<(char *)p;

Gioa32
27-02-2013, 15:18
Non va. L'output che ottengo dal seguente codice:



char *c = new char('a');
cout << &c <<endl;
void *p=&c;
cout << p << endl;
char *c2 =(char *)p;
cout << c2 << endl;
cout << (char *)p <<endl;

questo:

0x7ffff9b13088
0x7ffff9b13088
pq
pq

mentre dovrei (vorrei) ottenere 4 stringhe uguali. Come si pu fare?

MItaly
27-02-2013, 15:34
Pardon, non ci siamo intesi.
L'operatore << nel caso di char * stampa come stringa, non come puntatore, non c' modo di aggirare questo fatto. In ogni caso, puoi stampare l'indirizzo dell'inizio della stringa convertendo a void * (non cambia l'indirizzo, solo il tipo del puntatore).

Gioa32
27-02-2013, 15:40
grazie mille

MItaly
27-02-2013, 15:45
:ciauz:

Gioa32
27-02-2013, 18:00
Comunque cercando ancora sono riuscita a stampare cosi:


char *c = new char('a');
cout << &c <<endl;
void *p=&c;
cout << p << endl;
char *c2 =(char *)p;
printf("%p", c2);

MItaly
27-02-2013, 18:10
Be', normale, l stai dicendo alla printf di considerare l'argomento come se fosse un void *. Nota tra l'altro che quello che fai non perfettamente standard, dato che, per quanto concerne lo standard C, non necessariamente vero che un char * abbia le stesse dimensioni di un void *.
---edit---
No per aspetta un momento... &c un'altra cosa ancora, la locazione di memoria di c, non di ci a cui punta...

Loading