L’operatore di indirizzo (&)
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 3 di 63.
Ora che sai dichiarare i puntatori, devi imparare come memorizzare effettivamente un indirizzo di memoria al loro interno. L'operatore indirizzo di (&) è fondamentale per ottenere l'indirizzo di memoria di qualsiasi variabile.
Quando metti l’operatore & davanti al nome di una variabile, restituisce l’indirizzo di memoria in cui è memorizzata quella variabile. Immagina di chiederti: «Dove si trova questa variabile in memoria?»
int age = 25;
int *ptr;
ptr = &age; // Memorizza l'indirizzo di 'age' in 'ptr'In questo esempio, &age ci fornisce l’indirizzo di memoria della variabile age. Poi assegniamo questo indirizzo al nostro puntatore ptr. Ora ptr «punta a» la variabile age.
L'operatore di indirizzo è essenziale perché è il collegamento tra le variabili normali e i puntatori. Senza di esso, non potresti indicare a un puntatore a quale variabile puntare. Ricorda che i tipi di dati devono corrispondere: puoi assegnare l'indirizzo di un intero solo a un puntatore dichiarato per gli interi.
Sfida
FacileScrivi un programma C che mostri come usare l'operatore di indirizzo per collegare le variabili ai puntatori. Il tuo programma deve:
- Dichiarare una variabile intera chiamata
numbere inizializzarla con il valore 42 - Dichiarare una variabile carattere chiamata
lettere inizializzarla con il valore 'X' - Dichiarare un puntatore a un intero chiamato
num_ptr - Dichiarare un puntatore a un carattere chiamato
char_ptr - Usare l'operatore di indirizzo per assegnare l'indirizzo di
numberanum_ptr - Usare l'operatore di indirizzo per assegnare l'indirizzo di
letterachar_ptr - Stampare gli indirizzi contenuti in entrambi i puntatori usando
printfcon lo specificatore di formato%p
Il tuo output deve mostrare gli indirizzi dei puntatori nel seguente formato:
Address of number: [address]
Address of letter: [address]Gli indirizzi di memoria effettivi varieranno da un'esecuzione del programma all'altra, ma il formato e le etichette devono corrispondere esattamente a quanto mostrato sopra. [address] è un segnaposto per l'indirizzo stampato: non stampare le parentesi quadre.
Provalo tu
#include <stdio.h>
int main() {
// TODO: Scrivi qui il tuo codice
// 1. Dichiara e inizializza le variabili
// 2. Dichiara i puntatori
// 3. Usa l'operatore di indirizzo per assegnare gli indirizzi
// 4. Stampa gli indirizzi usando il formato mostrato
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