L’operatore di dereferenziazione (*)
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 4 di 63.
Ora che sai come memorizzare gli indirizzi nei puntatori, devi imparare ad accedere al valore effettivo memorizzato a quell’indirizzo di memoria. L’operatore di dereferenziazione (*) ti permette di «seguire» il puntatore per ottenere il valore a cui punta.
Quando metti l'operatore * davanti a una variabile puntatore, accede al valore memorizzato all'indirizzo di memoria contenuto nel puntatore. Pensalo come dire: «dammi ciò che c'è nella stanza a questo indirizzo».
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // Stampa 25 - il valore di ageÈ importante capire che l'asterisco (*) ha due significati diversi in C. Quando dichiari un puntatore come int *ptr;, l'asterisco indica che ptr è un puntatore. Quando viene usato con un puntatore esistente, come *ptr, dereferenzia il puntatore per accedere al valore a cui punta.
L’operatore di dereferenziazione è essenziale perché completa il ciclo dei puntatori: puoi memorizzare un indirizzo in un puntatore con & e poi recuperare il valore a quell’indirizzo con *. Questo ti permette di accedere indirettamente alle variabili e modificarle tramite i loro indirizzi di memoria.
Sfida
FacileScrivi un programma in C che dimostri il flusso di lavoro completo con i puntatori: dichiarazione, assegnazione dell’indirizzo e dereferenziazione. Il programma deve:
- Dichiarare una variabile intera chiamata
valuee inizializzarla con il valore 75 - Dichiarare una variabile float chiamata
pricee inizializzarla con il valore 19.99 - Dichiarare un puntatore a un intero chiamato
value_ptr - Dichiarare un puntatore a un float chiamato
price_ptr - Usare l’operatore di indirizzo per assegnare l’indirizzo di
valueavalue_ptr - Usare l’operatore di indirizzo per assegnare l’indirizzo di
priceaprice_ptr - Usare l’operatore di dereferenziazione per stampare il valore di
valuetramitevalue_ptr - Usare l’operatore di dereferenziazione per stampare il valore di
pricetramiteprice_ptrcon esattamente 2 cifre decimali
L’output deve visualizzare i valori dereferenziati nel seguente formato:
Value through pointer: 75
Price through pointer: 19.99La sfida verifica la tua comprensione di come l’operatore di dereferenziazione recupera il valore della variabile originale seguendo l’indirizzo memorizzato nel puntatore.
Provalo tu
#include <stdio.h>
int main() {
// TODO: Scrivi qui il tuo codice
// 1. Dichiara e inizializza le variabili
// 2. Dichiara i puntatori
// 3. Assegna gli indirizzi ai puntatori
// 4. Stampa i valori dereferenziati
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online