DOMANDA Domanda Puntatori

Robert T.

Utente Attivo
Allora parto dal presupposto che ho capito il significato del codice e del perchè dell'errore ma ho un dubbio.

Codice:
#include <stdio.h>

int main() {
    int x;
    int y;

    int * const xPtr = &x;

    *xPtr = 7;
    xPtr = &y;
}
Perchè xPtr viene chiamato con l'asterisco davanti e dopo senza, cioè a cosa serve chiamarlo con e senza l'asterisco davanti?

Poi un dubbio, un puntatore può avere un valore costante ma un indirizzo non costante?
 
Ultima modifica:
Ciao, un puntatore è una variabile atta a contenere un indirizzo di memoria e l'asterisco, messo di prima del nome di una variabile puntatore, prende il nome di "operatore di deferenziazione" e serve per accedere al dato contenuto all'indirizzo memorizzato nella variabile puntatore.
Nel caso del codice da te riportato ( *xPtr = 7; ) l'asterisco messo prima di xPtr, serve a:
1) deferenziare il puntatore xPtr
2) accedere all'area di memoria a cui punta
3) memorizzargli il numero 7.
Quando invece, nella riga sotto ( xPtr = &y; ) non è presente l'asterisco, si sta inserendo l'indirizzo di memoria della variabile y in xPtr. Infatti prima della variabile y è presente l'operatore di indirizzo ( & ) che serve per restituire l'indirizzo di memoria della variabile y da mettere in xPtr.
Quindi:
- xPtr è una variabile puntatore che serve a contenere un indirizzo di memoria.
- & restituisce l'indirizzo di memoria di una variabile.
- * serve per accedere all'area di memoria memorizzata in xPtr.
Se facciamo:
Codice:
int y=7; // assegnamo ad una variabile non puntatore il numero 7.
int *xPtr=&y; // mettiamo l'indirizzo di memoria di y in xPtr.
*xPtr; // verrà restituito il dato contenuto in y (quindi il numero 7).
// Se dopo ciò, nella variabile y inseriamo un'altro dato es:
y=11;
*xPtr; // verrà restituito il numero l'11.
//Questo perchè in xPtr è memorizzato l'indirizzo della variabile y.
 
Ultima modifica:
  • Mi piace
Reactions: Nico911

Entra

oppure Accedi utilizzando