Newsgroup: it.comp.lang.c++
Titolo: Come assegno una variabile a un puntatore?

Scusate il dubbio amletico da niubbo, ma mi sto impazzendo.
Ho una funzione che mi tira fuori un puntatore a long, come faccio a
valorizzare una variabile long il cui puntatore sia proprio quello?
Non so se sono riuscito a spiegarmi!
long *punt_long    lo conosco
long  val_long     devo valorizzarla in modo che punti all'area 
                        di memoria di punt_long.
Ma come faccio ???? Aiuto !!!
Danilo

Danilo ha scritto:

Ti pongo un problema analogo.
Io ho un foglietto di carta (chiamiamolo "punt_long") dove c'č scritto "Via
Garibaldi 12" e ho una casa (chiamiamola "val_long") che sta in Via Cavour
34. Come faccio a spostare la casa in Via Garibaldi 12, come scritto sul
foglietto?
--
Cingar
P.S. Giuro che hai chiesto questo! Se volevi dire il contrario, cioč come
faccio a valorizzare il puntatore "punt_long" in modo che punti alla memoria
occupata dalla variabile "val_long" (ovvero: come faccio a scrivere "Via
Cavour 34" sul foglietto) allora la risposta č semplicemente:
punt_long = &val_long;
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

                         di memoria di punt_long.
val_long = reinterpret_cast<long>(punt_long);
Questo mette in val_long l'indirizzo di memoria puntato da punt_long.
Saluti
-- 
alef

Questo mette in val_long l'indirizzo di memoria puntato da punt_long.
Grazie !!!

 foglietto?
La casa val_long verrą abbattuta per far spazio ad una scritta su un
muro, rovina della vecchia casa, che reciterą "Via Garibaldi 12", dipinta
da Danilo che regge nell'altra mano il foglietto punt_long.
-- 
alef

 da Danilo che regge nell'altra mano il foglietto punt_long.
Che č esattamente ciņ che succede con la soluzione che hai dato tu... E
visto che ha detto "grazie" suppongo che fosse quello che voleva.
Non sapevo dell'esistenza di questo "reinterpret_cast" e, a dire il vero,
ancora non ho ben capito a che serva.
Non capisco in che cosa si differenzi quest'istruzione:
   val_long = reinterpret_cast<long>(punt_long);
da questa qui:
   val_long = long(punt_long);
Ammesso che un long abbia abbastanza bit da contenere un puntatore, cosa c'č
che non va nella seconda? E se invece *non* avesse abbastanza bit, come fa
la prima a funzionare?
--
Cingar


 la prima a funzionare?
Boh? Rispondo con Eckel:
"A reinterpret_cast pretends that an object is just a bit pattern that
can be treated (for some dark purpose) as if it were an entirely
different type of object. This is the low-level bit twiddling that C is
notorious for."
Saluti
-- 
alef

 notorious for."
Ti ringrazio della spiegazione ma ammetto che ci capisco meno di prima...
Pare quasi che, nel tentativo (lodevole) di scoraggiare una pratica
pericolosa, abbiano aggiunto un secondo modo per farla...
(Non è che qualche per caso al comitato dello standard C++ ci è finito
qualche politicante italiano, eh? :-)
Non è che, magari, dell'operatore reinterpret_cast *non* si può fare
l'overloading? Questo potrebbe aver senso: quando usi la sintassi "T(x)"
specifichi che ti va bene che venga chiamato l'operatore di cast overloaded
(se esiste), mentre quando usi "reinterpret_cast<T>(x)" obblighi il
compilatore a fare un cast binario, di basso livello.
Boh... Approfondirò.


 Boh... Approfondirò.
Facci sapere.
--
alef