Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Puntatori..
Forum - C/C++ - Puntatori..

Avatar
Iannibelli (Normal User)
Rookie


Messaggi: 26
Iscritto: 24/11/2007

Segnala al moderatore
Postato alle 23:41
Venerdì, 30/11/2007
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:

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 18:30
Sabato, 01/12/2007
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

PM Quote
Avatar
albertking82 (Member)
Pro


Messaggi: 112
Iscritto: 14/08/2006

Segnala al moderatore
Postato alle 16:26
Domenica, 16/12/2007
Ottima spiegazione.

PM Quote