Oppure

Loading
30/11/07 22:41
Iannibelli
Ciao a tutti!

Volevo chiedervi una grande favore..

leggendo i giro ho visto che i puntatori sono molto importanti..

Però leggendo in giro è anche difficile capirne il loro utilizzo,

Chi mi spiegherebbe a cosa servono e come si usano?

Ringrazio anticipatamente:k:
aaa
01/12/07 17:30
HeDo
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 è '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 è '{parsed_message}'
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'
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
aaa
16/12/07 15:26
albertking82
Ottima spiegazione.
aaa