Una variabile è un'area di memoria cui puo essere associato un nome ed un valore. Cio che la rende unica è l'indirizzo di memoria, non il nome.
Questo significa che tu puoi avere piu variabili con lo stesso nome cosi come piu variabili senza nome. Ognuna di esse, in ogni caso, è resa unica dal proprio indirizzo.
esempio del primo caso
{
int x;
{
int x;
}
}
esempio del secondo, una qualunque variabile allocata dinamicamente tramite puntatore.
Il tipo di valore che la variabile puo contenere, dipende appunto dal tipo di variabile dichiarato.
Un puntatore è una variabile (e quindi ha un indirizzo di memoria proprio ed unico) con una particolarità: come valore ha l'indirizzo di un'altra variabile (quindi hanno tutti dimensione 2 bytes, perche sono quelli necessari per contenere un indirizzo).
se hai queste definizioni:Il concetto dei puntatori ancora nn mi è kiaro:
*variabile = &intero;
*variabile = intero;
cosa succede in entrambi i casi?
typename intero;
typename *variabile;
Nel primo caso con variabile punti all'area di memoria di intero e quindi puoi manipolare intero attraverso variabile.
Nel secondo hai un errore di compilazione (devi passare un indirizzo)
Se invece intero è definito come
typename *intero;
Cioè anche intero è un puntatore allo stesso tipo di dato di variabile, allora il primo caso ti da errore perche variabile è un puntatore a typename e non un puntatore a puntatore a typename (doveva essere un doppio puntatore per essere corretto).
Mentre al contrario adesso la seconda istruzione ha senso: entrambe puntano all'oggetto cui intero punta gia (se punta a qualcosa).
Nel primo caso, nella funzione nome_funz, lavori direttamente sull'oggetto originale.void nome_funz(int &ciao);
void nome_funz(int *ciao);
che cosa cambia in entrabi i casi?
Nel secondo, in teoria lavori per valore (perche tu passi il valore del suo indirizzo di memoria). In pratica poi puoi lavorare indirettamente su ciao attraverso il puntatore.
Se nn sei abituato alla sintassi dei puntatori la reference ti è piu comoda perche la sintassi è la stessa di una normale variabile.
Se poi in realtà vuoi passare l'oggetto per reference ma nn vuoi che sia modificato nella funzione, metti const e sei a posto.
![]()