Puntatori C

I puntatori sono potenti funzionalità della programmazione C e C ++. Prima di imparare i puntatori, impariamo gli indirizzi nella programmazione C.

Indirizzo in C

Se hai una variabile var nel tuo programma, &var ti fornirà il suo indirizzo in memoria.

Abbiamo utilizzato lindirizzo numerose volte durante lutilizzo della funzione scanf().

Qui, il valore inserito dallutente viene memorizzato nellindirizzo della variabile var. Facciamo un esempio funzionante.

Risultato

var: 5 address of var: 2686778

Nota: probabilmente otterrai un indirizzo diverso quando esegui il codice precedente.

C Puntatori

I puntatori (variabili puntatore) sono variabili speciali che vengono utilizzate per memorizzare indirizzi piuttosto che valori.

Sintassi puntatore

Ecco come possiamo dichiarare i puntatori.

Qui abbiamo dichiarato un puntatore p di tipo int.

Tu può anche dichiarare i puntatori in questi modi.

Prendiamo un altro esempio di dichiarazione di puntatori.

Qui abbiamo dichiarato un puntatore p1 e una normale variabile p2.

Assegnazione di indirizzi ai puntatori

Facciamo un esempio.

Qui, 5 è assegnato alla variabile c. Inoltre, lindirizzo di c è assegnato al puntatore del PC.

Ottieni il valore della cosa puntata dai puntatori

Per ottenere il valore della cosa puntata dai puntatori, usiamo * operatore. Ad esempio:

Qui, lindirizzo di c è assegnato al puntatore del PC. Per ottenere il valore memorizzato in quellindirizzo, abbiamo utilizzato * pc.

Nota: nellesempio precedente, pc è un puntatore, non *pc. Non puoi e non dovresti fare qualcosa come *pc = &c;

A proposito, * è chiamato operatore di dereferenziazione ( quando si lavora con i puntatori). Funziona su un puntatore e fornisce il valore memorizzato in quel puntatore.

Modifica del valore puntato dai puntatori

Facciamo un esempio.

Abbiamo assegnato lindirizzo di c al puntatore del pc.

Quindi, abbiamo cambiato il valore di c in 1. Poiché pc e lindirizzo di c è lo stesso, *pc ci fornisce 1.

Facciamo un altro esempio.

Abbiamo assegnato lindirizzo di c al puntatore del PC.

Quindi, abbiamo cambiato *pc in 1 utilizzando *pc = 1;. Poiché pc e lindirizzo di c sono gli stessi, c sarà uguale a 1.

Facciamo un altro esempio.

Inizialmente, lindirizzo di c viene assegnato al puntatore del PC utilizzando pc = &c;. Poiché c è 5, *pc ci dà 5.

Quindi, lindirizzo di d viene assegnato al puntatore del PC utilizzando pc = &d;. Poiché d è -15, *pc ci fornisce -15 .

Esempio: utilizzo di puntatori

Facciamo un esempio funzionante.

Risultato

Address of c: 2686784Value of c: 22Address of pointer pc: 2686784Content of pointer pc: 22Address of pointer pc: 2686784Content of pointer pc: 11Address of c: 2686784Value of c: 2

Spiegazione del programma

  1. int* pc, c;

    Qui , vengono creati un puntatore pc e una normale variabile c, entrambi di tipo int.
    Poiché pc e c non sono inizializzati inizialmente, il puntatore pc punta a nessun indirizzo o un indirizzo casuale. Inoltre, la variabile c ha un indirizzo ma contiene un valore di immondizia casuale.
  2. c = 22;

    Assegna 22 alla variabile c. Cioè, 22 è archiviato nella posizione di memoria della variabile c.
  3. pc = &c;

    Questo assegna lindirizzo della variabile c al puntatore pc.
  4. c = 11;

    Questo assegna 11 alla variabile c.
  5. *pc = 2;

    Questo cambia il valore nella posizione di memoria puntata dal puntatore pc a 2.

Errori comuni quando si lavora con i puntatori

Supponiamo che tu voglia che il puntatore pc faccia indicare lindirizzo di c. Quindi,

Ecco un esempio di sintassi del puntatore che i principianti trovano spesso confuso.

Perché non abbiamo ricevuto un errore quando utilizzando int *p = &c;?

È perché

è equivalente a

In entrambi i casi, stiamo creando un puntatore p (non *p) e assegnandovi &c.

Per evitare questa confusione, possiamo usare laffermazione come questa:

Ora che sai cosa sono i puntatori, imparerai come i puntatori sono correlati agli array nel prossimo tutorial.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *