Dichiarare i puntatori
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 2 di 63.
Ora che hai capito cosa sono i puntatori, impariamo a crearli. La dichiarazione di una variabile puntatore segue una sintassi specifica che indica al compilatore a quale tipo di dati punterà il puntatore.
La sintassi di base per dichiarare un puntatore è: data_type *pointer_name;
int *ptr; // Dichiara un puntatore a un intero
char *ch_ptr; // Dichiara un puntatore a un carattere
float *f_ptr; // Dichiara un puntatore a un floatL'asterisco (*) è ciò che rende questa una dichiarazione di puntatore. Indica al compilatore che questa variabile memorizzerà un indirizzo di memoria, non il valore effettivo dei dati. Quando dichiari int *ptr;, stai dicendo «ptr è un puntatore che può memorizzare l'indirizzo di una variabile intera».
È buona norma inizializzare i puntatori a NULL se non puntano ancora a un indirizzo di memoria valido. Questo impedisce loro di puntare a posizioni di memoria casuali: int *ptr = NULL;
Quando stampi gli indirizzi dei puntatori usando printf, usa lo specificatore di formato %p. Spesso si consiglia di convertire il puntatore in (void *) per garantire la compatibilità e una formattazione corretta: printf("%p", (void *)ptr);
Nota che il tipo di dati prima dell'asterisco specifica a quale tipo di dati punterà il puntatore. Questo è importante perché i diversi tipi di dati occupano quantità diverse di spazio in memoria e il compilatore deve conoscere queste informazioni per gestire correttamente la memoria.
Sfida
Facile- Dichiarare un puntatore a un intero denominato
int_ptr, inizializzato aNULL - Dichiarare un puntatore a un carattere denominato
char_ptr, inizializzato aNULL - Dichiarare un puntatore a un valore float denominato
float_ptr, inizializzato aNULL - Stampare gli indirizzi di memoria memorizzati in ciascun puntatore usando
printfcon lo specificatore di formato%p. Quando stampi, esegui il cast del puntatore a(void*)per garantire la formattazione corretta, per esempio:printf("Label: %p\n", (void*)ptr);
L'output deve mostrare i tre indirizzi dei puntatori nel seguente formato:
Integer pointer: [address]
Character pointer: [address]
Float pointer: [address]Nota che gli indirizzi di memoria effettivi varieranno, ma il formato e le etichette devono corrispondere esattamente a quelli mostrati sopra.
Provalo tu
#include <stdio.h>
int main() {
// TODO: Dichiara qui i tuoi puntatori
// TODO: Stampa gli indirizzi dei puntatori usando il formato richiesto
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