Della dereferenziazione ne abbiamo già discusso nella precedente lezione, ne riportiamo un esempio.
Abbiamo già trattato l'assegnamento nella lezione precedente.
Fondamenti solidi di programmazione
Impara le basi della programmazione in C in modo semplice, pratico ed efficace. Variabili, cicli, funzioni, logica e algoritmi.
- ⏱️ 9 ore di corso registrato
- 🧩 Più di 50 algoritmi risolti passo passo
- 🎯 Livello base
- 💻 100% online, fruibile quando vuoi
pb=pa;
o ancora un altro esempio:
int *pa=NULL;
In questo caso viene assegnato al puntatore pa il valore NULL, quindi restituisce il valore 0.
Ricordiamo che se un puntatore viene dichiarato ma non inizializzato non punta a NULL e restituisce il valore 1.
Il confronto
int *pa, *pb;
if (pa==pb);
....
else if (pa<pb)
....
Il confronto può essere utilizzato per vedere se due puntatori puntano alla stessa locazione di memoria.
Si possono utilizzare gli operatori:
==, !=, <, <=, >, >=
Operazioni di incremento e decremento
Incremento - Per andare da un indirizzo più basso ad uno più alto.
Decremento - Per andare da un indirizzo più alto ad uno più basso.
Quindi gli operatori ammessi per una variabile puntatore sono:
+, ++, -, --
Vediamo un semplice esempio a scopo didattico, ipotizzando di avere un array di 5 elementi qualunque. L'operazione di somma puntatore e intero in questo caso provoca un avanzamento del puntatore esattamente a quanto corrisponde l'intero. Allo stesso modo per la differenza, la sottrazione di un intero da un puntatore provoca uno spostamento del puntatore dall'alto verso il basso.
Cioè l'operazione p++ mi dà l'indirizzo della seconda cella, p+=2 mi dà l'indirizzo della terza cella e così via.
Esempio di utilizzo di aritmetica dei puntatori in C con gli operatori di incremento e decremento:
#include <stdio.h>
int main(void) {
int a[5]= {9,5,6,7,10};
int *p = &a[0];
printf("\nStampa il valore %d", *p);
//stampa il primo valore, cioè 9.
p++;
/*il puntatore si sposta dalla posizione più bassa
a quella più alta di una posizione. */
printf("\nStampa il valore %d", *p);
// quindi stamperà il valore 5.
p--;
/*il puntatore si sposta dalla posizione più alta
a quella più bassa di una posizione. */
printf("\nStampa il valore %d", *p);
// quindi stamperà il valore 9.
p += 2;
/*il puntatore si sposta dalla posizione più bassa
a quella più alta di due posizioni. */
printf("\nStampa il valore %d", *p);
// quindi stamperà il valore 6.
p += 2;
/*il puntatore si sposta dalla posizione più bassa
a quella più alta di due posizioni */
printf("\nStampa il valore %d", *p);
// quindi stamperà il valore 10.
return 0;
}
Fate anche la prova a stampare gli indirizzi e analizzate i risultati ottenuti.
int main(void) {
int a[5]= {9,5,6,7,10};
int *p = &a[0];
printf("\nStampa il valore %p", p);
p = p + 1;
printf("\nStampa il valore %p", p);
p--;
printf("\nStampa il valore %p", p);
p += 2;
printf("\nStampa il valore %p", p);
p += 2;
printf("\nStampa il valore %p", p);
return 0;
}
La sottrazione tra puntatori è definita solo quando entrambi i puntatori puntano ad elementi dello stesso array.
La sottrazione tra un puntatore e un altro produce il numero di posizioni tra i due puntatori.
Facciamo quindi un semplice esempio:
#include <stdio.h>
int main(void) {
int a[10];
int *p = &a[0];
int *q, d;
q = p;
p += 6;
d = p - q;
printf("Numero di interi che si possono memorizzare tra i due puntatori : %d ", d);
return 0;
}
Il programma mi dirà che si possono memorizzare tra i due puntatori 6 numeri interi.
In questa lezione abbiamo introdotto l'aritmetica dei puntatori, approfondiremo l'argomento ancora nelle prossime lezioni.
Alcuni link utili
Realizzare un menù di scelta in C
Strutture complesse in C
Esercizio sulle struct in C
Typedef struct C
Media per riga e per colonna
Somma elementi diagonale principale di una matrice
Come sommare gli elementi della cornice esterna
Come sommare due matrici
Sommare dei numeri di una matrice
Matrice trasposta
Prodotto tra matrici
Ricerca elementi in una matrice
Inserire dati in una matrice
Tavola pitagorica in C
Array multidimensionali
Programma sui triangoli in C
Media dei numeri in un array
Array con numeri random
Quick sort in C
Selection sort in C
Merge sort in C
Insertion Sort in C