Last active
January 30, 2021 10:55
-
-
Save neo7BF/fee957161ff1e086fff474d856fe780b to your computer and use it in GitHub Desktop.
Related to my article on the use of the pointers in C++
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
using namespace std; | |
int main() | |
{ | |
/* | |
Il calcolatore assegna ad A l’indirizzo della cella di memoria 0x00 | |
e memorizza il valore 5 | |
*/ | |
int A = 5; | |
/* | |
Con l’operatore & ottengo l’indirizzo di A quindi l’istruzione | |
stampa a video l'indirizzo 0x00 | |
*/ | |
cout << &A << endl; | |
/* | |
Qui di seguito viene dichiarata la variabile B, puntatore di | |
tipo int, a cui il calcolatore assegna la cella all'indirizzo 0x01, | |
poi tale variabile viene utilizzata per memorizzare l'indirizzo di A | |
*/ | |
int* B = &A; //il calcolatore assegna a B la cella all’indirizzo 0x01, | |
//in tale cella, viene memorizzato l’indirizzo di A 0x00 | |
/* | |
La seguente istruzione provoca un errore in compilazione ! | |
Questa riga commentata è stata inserita per sottolineare che B | |
è una variabile di tipo int* (int puntatore) e come tale può ricevere | |
come valore solamente un indirizzo | |
*/ | |
//B = 5; //Errore ! B è di tipo int* (int puntatore) non è di tipo int | |
/* | |
Questa istruzione stampa a video il dato contenuto nella cella il cui indirizzo | |
è memorizzato in B. | |
Poiché in B è stato precedentemente memorizzato l’indirizzo di A | |
verrà stampato il valore 5 | |
*/ | |
cout << *B << endl; //stampa il dato della cella all’indirizzo | |
//contenuto in B cioè 5 | |
/* | |
B è una variabile di tipo int*(int puntatore) che memorizza indirizzi, | |
poiché è una variabile però, anche ad essa il calcolatore assegna un indirizzo. | |
Questa istruzione stampa a video l'indirizzo di B | |
*/ | |
cout << &B << endl; // & ottiene l’indirizzo di B assumo che sia 0x01 | |
/* | |
In questo caso invece viene stampato il dato contenuto in B, | |
ma essendo B un puntatore che memorizza solo indirizzi + | |
e visto che in precedenza in esso è stato memorizzato l’indirizzo | |
della variabile A il dato che contiene è 0x00 | |
*/ | |
cout << B << endl; //stampa il dato contenuto in B, | |
//B è un puntatore che memorizza l’indirizzo di A quindi 0x00 | |
/* | |
Il valore alla cella puntata da B viene cambiato da 5 a 10, | |
e poiché B punta alla cella di memoria di A, è il valore di A che viene cambiato. | |
*/ | |
*B = 10; //cambia il dato della cella a cui punta B, cioè il valore della cella di A | |
cout <<"Valore valore di A: "<< A << endl; | |
cout <<"Valore contenuto nella cella puntata da B: "<< *B << endl; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment