Che cosa è un puntatore in C?

April 4

Una delle caratteristiche che rende C ad un potente linguaggio di programmazione è la possibilità per i programmatori di accedere alla memoria direttamente utilizzando puntatori. I puntatori sono ampiamente utilizzati in C per la gestione di array di dati, manipolazione di stringhe di caratteri, passare i parametri alle funzioni e la creazione di liste collegate e altre strutture dati complesse. I puntatori sono una delle maggiori fonti di confusione per i programmatori nuove al linguaggio C. La comprensione e l'utilizzo di puntatori è fondamentale per un'efficace programmazione C.

Che cosa è un puntatore in C?

puntatore puntatore: Fare attenzione a pulire!

Funzione

Un puntatore di oggetto, o semplicemente puntatore, è una variabile che contiene un indirizzo di memoria in cui un oggetto, ad esempio una struttura o galleggiante, o una matrice di oggetti, viene memorizzato. Con questo indirizzo di memoria, il programmatore può leggere, modificare e muoversi attraverso la memoria utilizzando un puntatore.

Benefici

Le funzioni che richiede un puntatore ad un oggetto esterno passati come parametro può modificare tale oggetto. Quando la funzione termina, il nuovo valore assegnato a tale oggetto persisterà. Una funzione può prendere più puntatori, permettendo una singola funzione per modificare più oggetti con una sola chiamata di funzione.

Un puntatore può essere utilizzato per navigare attraverso una serie di elementi in modo sistematico o casuale usando la notazione di matrice, l'iterazione o la matematica di base. Usando puntatori per l'accesso agli array è più veloce rispetto alle implementazioni più complesse di funzionalità simili si trovano in altre lingue. Mentre tali implementazioni sono spesso più facili da utilizzare ed evitare errori, vi è un ulteriore sovraccarico che influisce sulle prestazioni.

Importanza

La capacità di allocare dinamicamente quantità arbitrarie di memoria heap durante l'esecuzione è una tecnica chiamata "allocazione dinamica della memoria." Molti linguaggi precedenti, come Fortran, richiesto la quantità di memoria allocata per strutture come array da impostare in fase di compilazione, e la quantità di memoria allocata non possono essere modificati durante l'esecuzione del programma. I puntatori sono utilizzati in C per contenere l'indirizzo di memoria allocata dinamicamente.

uso

Un puntatore è dichiarato posizionando un asterisco (*) tra il nome del tipo e il nome della variabile.

Il valore di un oggetto in memoria all'indirizzo detenuta dal puntatore si accede da "dereferenziazione" il puntatore. Dereferencing un puntatore è fatto mettendo un asterisco (*) prima del nome del puntatore.

Quando si maneggia puntatori a struct, un membro del struct si fa riferimento utilizzando una freccia (->) tra il nome puntatore e il nome del membro.

L'indirizzo di un oggetto può essere raggiunto mettendo un commerciale (&) prima del nome variabile dell'oggetto. Passando l'indirizzo di un oggetto ad una funzione è chiamata "passare per riferimento." Il parametro viene dichiarata come puntatore nel prototipo funzione. La funzione dereference il parametro di modificare il suo valore, e il valore persisterà quando la funzione termina.

Gli array sono creati ripartendo la quantità di memoria necessaria per contenere il numero desiderato di oggetti di un dato tipo. Questa operazione viene eseguita durante o dopo la dichiarazione con l'indicatore di notazione e malloc o calloc, o durante la dichiarazione usando la notazione array. Gli elementi di un array può accedere usando la notazione di riferimento indice o iterando il puntatore. Iterazione incrementa automaticamente o decrementa l'indirizzo per la dimensione di un singolo elemento in modo che il puntatore è posizionato correttamente all'inizio dell'elemento successivo o precedente.

avvertimento

L'allocazione di memoria e deallocazione è gestito dal programmatore. Memoria che è stata allocata deve essere deallocato quando è più necessario. Non riuscendo a rilasciare la memoria impedisce di essere utilizzato fino a quando la chiusura dell'applicazione. A "perdita di memoria" si verifica quando un riferimento alla memoria allocata viene perso senza liberare la memoria prima. Le perdite di memoria possono accadere quando un puntatore viene riassegnato, o una funzione esce senza delegare la proprietà della memoria allocata.

L'accesso di memoria oltre la fine di memoria allocata è un errore comune quando si lavora con gli array. Questo errore si chiama avere un "indice di matrice fuori dai limiti." Ciò può causare l'applicazione per comportarsi in modo non corretto o uscire inaspettatamente.