Esercizio sui puntatori

di il
5 risposte

Esercizio sui puntatori

Salve, avrei un problema che non riesco a capire...
Ho appena cominciato coi puntatori.
vi scrivo il codice del programma sui puntatori.
#include <stdio.h>

void cubo (int *nPtr);

int main(void)

{
int numero = 5;

printf ("Il valore iniziale della variabile e' %d\n", numero);
cubo(&numero);
printf("Il nuovo valore della variabile e' %d\n", numero);

return 0;
}

void cubo(int *nPtr)
{
*nPtr = (*nPtr) * (*nPtr) * (*nPtr);
}
adesso come spiega il libro all'inizio
i puntatori dovrebbero essere dichiarati e inizializzati.
E quindi:
int *nPtr = 0;
nPtr = &numero; (per sottolineare che nPtr punta a numero)
Quello che non capisco è come mai in questo programma non
viene dichiarato nulla.
Qualcuno me lo potrebbe spiegare in modo semplice per favore che sono
rimasto bloccato e il mio libro lo spiega troppo superficialmente ?

5 Risposte

  • Re: Esercizio sui puntatori

    Così ti verrebbe più facile da capire?
    
    int main(void)
    
    {
    int numero = 5;
    
    printf ("Il valore iniziale della variabile e' %d\n", numero);
    int *nPtr = 0;
    nPtr = &numero;
    cubo(nptr);
    printf("Il nuovo valore della variabile e' %d\n", numero);
    
    return 0;
    }
    
  • Re: Esercizio sui puntatori

    Sisi così e facile, ma perchè il libro me lo da in quell'altro modo ?
  • Re: Esercizio sui puntatori

    Scusa l' ignoranza skynet ma con tutto il dovuto rispetto avete scritto due cose del tutto differenti nella prima bozza di programma viene assegnato un valore a cubo nel seguente modo:
    cubo(&numero)
    poi questo nella funzione successiva viene fatto puntare da un puntatore e poi moltiplicato,se stesso,per 3 volte nel seguente modo
    *nPtr = (*nPtr) * (*nPtr) * (*nPtr);
    (questo nella sua versione ) mentre nella tua il puntatore punta al numero e non svolge la funzione che svolgeva nella precedente versione. Ora la mia domanda e la seguente cosa volevi farci capire facendo questa cosa ?
  • Re: Esercizio sui puntatori

    Il programma é sempre lo stesso ho solo aggiunto una variabile puntatore e li ho fatto assegnare l'indirizzo della variabile numero per poi prosseguire con la chiamata alla funzione cubo che accetta come parametro un puntarore ad int.
    Per Natura:
    Una variabile sta in un indirizzo di memoria. Quando noi diciamo int numero = 5; significa che il SO dará alla variabile numero una posizione nello stack e in quella posizione ci mettera il numero 5. Ma l'indirizzo della variabile numero sará ricavato usando il riferimento alla locazione di memoria dove sta la varibile ovvero &numero. Quindi creare un puntatore solo per farlo puntare alla variabile numero per poi usarlo poco dopo nella funzione cubo é uno sprecco perche si potrebbe usare direttamente il riferimento alla locazione di memoria e mettere quella locazione come parametro per la funzione cubo. Spero di aver chiarito un pó i dubbi ad entrambi.
  • Re: Esercizio sui puntatori

    Sisi
Devi accedere o registrarti per scrivere nel forum
5 risposte