Newsgroup: it.comp.lang.c++
Titolo: [neofita]Dubbio su indirizzo di memoria

 
Dal seguente sito, sto studiando i puntatori (mi sto anticipando
argomenti che il professore ancora deve spiegare):
 
http://appunti-programmazione.blogspot.it/2010/12/laritmetica-dei-puntatori.html
 
 
Non  ho capito cosa rappresenta il termine 0x nel seguente indirizzo:
 
0x7fff6c704b74
 
Potete darmi qualche chiarimento?
 
PS
Il termine a destra di 0x, se ho ben capito, rappresenta l'indirizzo
di memoria in esadecimale.
 
Ciao e grazie mille!

 
 
sì.
 
Ciao!

 di memoria in esadecimale.
 
"0x" � un prefisso usato dai canali standard di output quando emettono 
il valore di un puntatore. Il prefisso specifica che tale valore � 
espresso in base esadecimale.
 
Per esempio:
 
http://liveworkspace.org/code/43Ywy4$0
 
 


#include <iostream>
 
Interessante...e' un compilatore online?....ho provato questo semplice
programma:
 
========================================
 
int main() {
 
int a,b,s;
 
   std::cin >> a >> b;
 
   s=a+b;
 
   std::cout << s;
 
   return 0;
}
 
================================
 
...se ho ben capito nella finestra "stdin data" i dati per
l'istruzione cin si mettono in colonna.
 
Per curiosità, ho provato a dare dei valori decimali, diversamente da
quanto dichiarato (tipo intero) per le variabili a e b:
 
stdin data
 
8.9
3.1
 
ed ottengo in exit code
 
8
 
Come si arriva a questo risultato?
 
Ciao e grazie mille!
 
 
 

 
 
Niente a che vedere con la memoria: è la sintassi per specificare un 
intero.
 
 
Ciao  Manlio

 Come si arriva a questo risultato?
 
Dato che "a" e "b" sono interi, il carattere "." non e' ammesso.
Prima si legge "8" in "a" con il "." che termina tale lettura.
Poi, dato che il punto non � ammesso, si assegna a "b" il valore di 
default, che � zero.
Quindi 8 + 0 = 8.
Se volevi 12, dove usare il tipo "float" o il tipo "double".
 
-- 
 
Carlo Milanesi
http://carlomilanesi.wordpress.com/
 


wrote:

Certo.....ma volutamente ho assegnato un numero decimale ad variabile
dichiarata intera, solo per curiosita' e per poi capire come si
arrivasse a quel risultato.
 
Ciao e grazie mille!

On 22 Mar, 15:11, Manlio Perillo <manlio_perill...@SPAMlibero.it>
wrote:

Ma nel caso particolare dell'argomento puntatori:
 
http://appunti-programmazione.blogspot.it/2010/12/laritmetica-dei-puntatori.html
.
 
mi sembra di capire che il dato dopo  "0x":
 
7fff6c704b74
 
rappresenta il valore esadecimale di un indirizzzo di memoria.
 
Ciao e grazie milleeee!

 
 
No, non devi separare il prefisso 0x dal resto.
 
0x7fff6c704b74 è un numero intero, in formato esadecimale, che 
rappresenta l'indirizzo in memoria di qualcosa.
 
Ad esempio:
 
    void *p = 0x7fff6c704b74;
    /* ma nulla vieta di */
    void *q = 140735012686708; /* intero decimale */
    void *w = 03777755434045564; */ intero ottale */
 
p, q e w sono uquali.
 
Semplicemente usare la rappresentazione esadecimale per il valore di un 
puntatore è la convenzione comune.
 
 
 
Ciao   Manlio

On 23 Mar, 14:40, Manlio Perillo <manlio_perill...@SPAMlibero.it>
wrote:

OK, grazie mille!
 
Ciao
 
 
 
 

 default, che � zero.
 
Mi riesci a trovare il punto dello standard dentro cui questa cosa viene
detta? Quello che ho trovato io e' che sia implementation defined (nel
senso che in caso di errore non dice cosa succede alla variabile).
 
In particolare, la semantica di operator>> e' definita, nel caso in cui
si stia leggendo un intero, in termini della semantica di num_get. Dove
descrive il comportamento di num_get, a pagina 432, nello stage 3
dell'algoritmo descritto dice che se sono stati accumulati chars che
sono comprensibili dal corrispondente scanf, allora il valore e' messo
in val (che e' poi quello che ci da anche operator>>) e
ios_base::goodbit e' messo dentro err -- che e' un parametro per
ritornare eventuali errori --.
 
Viceversa, subito dopo, dice che se scanf avrebbe riportato un
fallimento, allora ios_base::failbit e' assegnato ad err. Tuttavia non
dice nulla su cosa succede a val.
 
NB, lo standard dice che operator>>(int& val) si comporta come se fosse
definito dai seguenti statement:
 
typedef num_get< charT,istreambuf_iterator<charT,traits> > numget;
iostate err = 0;
use_facet< numget >(loc).get(*this, 0, *this, err, val);
setstate(err);
 
[loc e' un private dello stream ]
 
 
-- 
-riko
http://www.enrico-franchi.org/
 
http://rik0-techtemple.blogspot.com/
 

 [...]
 
Vedo che ne sai molto piu' di me sul linguaggio C++.
Io non so ne' cosa garantisce lo standard ne' cosa garantiscono i vari 
compilatori.
Ho solo constatato che con un compilatore, cambiando il valore 
precedente di una variabile intera, e poi facendo una lettura che 
fallisce, la variabile riceve sempre il valore zero.
Immaginando l'implementazione piu' ragionevole, presumo che la maggior 
parte dei compilatori faccia cosi'. Quindi e' verosimile che lo standard 
non garantisca comportamenti, ma che molte implementazioni garantiscano 
che in caso di fallimento venga assegnato zero.
