Skip to content

Instantly share code, notes, and snippets.

@neo7BF
Last active January 30, 2021 10:55
Show Gist options
  • Save neo7BF/fee957161ff1e086fff474d856fe780b to your computer and use it in GitHub Desktop.
Save neo7BF/fee957161ff1e086fff474d856fe780b to your computer and use it in GitHub Desktop.
Related to my article on the use of the pointers in C++
#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