Il primo esempio, molto chiaro sarebbe: (dentro il main eh)
- Codice:
int a;
int *aPtr; //aPtr e' un puntatore a un intero
a=7;
aPtr=&a; //imposta aPtr all'indirizzo di a
printf ("%p %p", &a, aPtr);
printf("%d %d", a, *aPtr);
}
Dove si vede che: a e *aPtr cioè il contenuto della cella puntata dal puntatore stampano lo stesso risultato in quanto stiamo parlando dello stesso contenuto mentre &a e aPtr stampano l'indirizzo proprio perché "dentro" il puntatore si ha l'indirizzo.
Il problema sta nell'esempio 2 quando spiega il passaggio per riferimento:
- Codice:
#include <stdio.h>
void cubeByReference (int *nPtr);
int main(void){
int numero=5;
cubeByReference(&numero);
}
void cubeByReference (int *nPtr){
*nPtr=*nPtr* *nPtr * *nPtr;
}
Ma se la funzione si aspetta un puntatore, perché non passo un puntatore ma un indirizzo? Cioè ho capito che il puntatore al suo interno ha salvato l'indirizzo di una variabile e di conseguenza punta a quella.. ma quando noi abbiamo una funzione che si aspetta int N gli do un numero int non altro.. spero di essermi spiegato.. probabilmente è una cavolata ma proprio non riesco a trovare un motivo: perché oltre numero non si dichiara un puntatore che punta a numero e passa quello?
Inoltre, da quello che ho capito (ormai ho messo tutto in dubbio ) il linguaggio C non prevede il passaggio per riferimento ma solo per valori..Allora quando noi usiamo i puntatori non è per riferimento (?) ma nemmeno per valore, come lo definiamo? stiamo praticamente raggirando il C?!
Grazie in anticipo per le vostre eventuali e pazienti risposte