Come creare un puntatore di memoria in C

August 6

C fa ampio uso di puntatori di memoria per la gestione di array, chiamate di funzione, le strutture dati e molto altro ancora. Saper lavorare direttamente con i puntatori è la chiave per la codifica efficiente C.

istruzione

Creare variabili di memoria Pointer

1 Capire che le variabili puntatore di memoria puntano sempre ai dati di un determinato tipo. Per esempio, un puntatore a un int è diverso da un puntatore a un char. Tuttavia, C non vi impedirà di mescolandoli liberamente in su. Farlo solo se siete sicuri di sapere cosa si sta facendo.

2 Creare una variabile puntatore di memoria utilizzando la sintassi devi usare per creare una variabile del tipo desiderato, ma con un asterisco

() prima del nome della variabile, in questo modo:
int x;

3 Considerare NULL. I puntatori possono essere sempre NULL (0), e questo di solito è usato per riferirsi a un puntatore che non è ancora stata fissata al punto da nessuna parte.

Riferimento e alla risoluzione del riferimento

4 Venite a conoscere Referencing.

Referencing si riferisce al processo di trovare il puntatore a una variabile esistente. In C, l'operatore di riferimento è il commerciale (&). Per esempio:

int color = 5;
int * pointer_to_color;
pointer_to_color = & colore;

5 Utilizzare Dereferencing.

Dereferencing è il processo di seguire un puntatore al suo valore, l'opposto di riferimento. In C l'asterisco () è usato per dereferencing, come segue:
printf ( "Il colore è% d \ n", pointer_to_color); /

Stampe 5 /

Utilizzare variabili di memoria Pointer

6 Passare in un puntatore alla variabile quando si ha bisogno di una funzione per essere in grado di cambiare una variabile, invece di passare il valore della variabile. In questo modo l'uso funzione di dereferencing per modificare il valore:

vuoto convert_color_to_RGB (colore int, int

rosso, verde int, int blu) {
rosso = redpart (colore);
verde = greenpart (colore);
blu = bluepart (colore);
}
convert_color_to_RGB (15, & myred, e mygreen, e MyBlue);

7 Aggirare i limiti di C. Ogni volta che si desidera passare un array o una struttura in una funzione, è necessario passare un puntatore, invece, a causa C consente solo i tipi di dati singoli da passare alle funzioni:

int subtotale (punteggi int *, int howmany) {
int totale = 0, I;
for (i = 0; i <howmany; i ++) totale + = punteggi [i];
rendimento totale;
}

8 Creare un ciclo. Dal momento che le stringhe sono in realtà array di caratteri, è possibile creare un puntatore a un carattere per scorrere una stringa:

replace_character void (char

s, char da, char a) {
cp char;
per (CP = s; cp && cp; CP ++) se (CP == da) * CP = a;
}

9 Capire il modo C viste le matrici. Gli array sono gestite da C come puntatori, usando l'aritmetica dei puntatori. C moltiplicherà automaticamente ciò che si aggiunge a un puntatore per la dimensione degli elementi a cui punta. Questo significa

punteggi [5] = 17; è esattamente lo stesso come

(punteggio + 5) = 17; . È possibile utilizzare i puntatori come una scorciatoia per dereferenziazioni array. Per esempio,
punteggi = 17; si riferisce sempre all'elemento 0th dell'array.

Consigli e avvertenze

  • In C, c'è una linea sottile tra puntatori di memoria e array. Essenzialmente, un array è solo un puntatore di memoria punta a un blocco di memoria che viene allocata automaticamente.
  • Dereferencing un puntatore nullo è un errore di run-time fatale. Anche se hai codificato per garantire un puntatore non è mai nullo dal momento della dereference, si dovrebbe codificare difensiva per evitare l'errore.
  • Il valore effettivo di un puntatore è importante, perché l'unico scopo di un puntatore è dereferenziarlo. Tuttavia, a scopo di debug, è possibile stampare il valore di un puntatore utilizzando il codice di formattazione% p. E 'una cattiva idea di attribuire molta importanza ad essa; cosa significa dipende funzionamento interno del sistema operativo.