I puntatori sono fondamentalmente delle variabili il cui valore è l'indirizzo di memoria di un'altra variabile.
Vengono utilizzati per l'allocazione dinamica della memoria, il passaggio di parametri per riferimento e velocizzano lo scorrimento delle stringhe:
1) Allocazione dinamica di un array:
int iNumEl, n, *piArr;
printf("Quanti elementi? ");
scanf("%d", &iNumEl);
// Alloca l'array
piArr = malloc(sizeof(int) * iNumEl);
// Chiede i valori all'utente
for (n = 0; n < iNumEl; n++) {
printf("Elemento %d: ", n);
scanf("%d", &piArr[n]); // Oppure: scanf("%d", piArr + n);
}
[...]
// Libera la memoria
free(piArr);
2) Passaggio parametri per riferimento
// Funzione che inverte due numeri interi
void Swap(int *piNum1, int *piNum2) {
int iNum3;
iNum3 = *piNum1;
*piNum1 = *piNum2;
*piNum2 = iNum3;
}
3) Scorrimento di stringhe tramite puntatori
char pStr[32], *p;
printf("Inserisci una stringa: ");
gets(pStr);
p = pStr; // Anche: p = &pStr[0]; ma non lo usa nessuno
// Continua finchè il valore di *p non è '\0'
while(*p) {
[...]
p++;
}
Sui puntatori agiscono 2 operatori in più: *(asterisco) e &(e commerciale).
L'operatore asterisco serve ad ottenere il valore della variabile puntata. Invece l'operatore e commerciale serve a ottenere l'indirizzo di memoria di una variabile:
int *piNum, iNum;
iNum = 100;
piNum = &iNum;
// 100
printf("%d",iNum);
// 100
printf("%d",*piNum);
// Assegna al valore della variabile puntata 50
*piNum = 50;
// 50
printf("%d",iNum);
Se guardi su internet ci sono guide su guide. Questa è solo una piccola parte delle cose che si possono fare con i puntatori, a breve pubblicherò la guida al C++, dove, tra le altre cose, spiegherò in maniera esaustiva l'uso dei puntatori.
by HeDo
|