Salve rieccoci qui per parlare di C ma questa volta da un punto di vista superiore iniziando a introdurre il concetto di puntatore che durerà molto perchè è un grosso concetto che va digerito poco per volta e sarebbe inutile scrivere tutto subito sarebbe suicida quindi ho già porzionato il giusto per ogni articolo.
Ma ora iniziamo a parlare dei puntatori.
Che cos' è un puntatore?
Un puntatore è una variabile che rappresenta un indirizzo di memoria
A che può servire?
Beh...serve tantissimo visto che modificano il valore della variabile a cui puntano senza usare nuova memoria per salvare il risultato e vi assicuro che se fate 1000 calcoli su interi salvare 4000 byte di spazio è molto meglio di usare per salvare nuovi risultati!
Ecco un argomentazione valida per usarli...
Ma come si dichiara e si usa?
Semplice si fa così
(tipo) * (nome del puntatore)
ESEMPIO int * x significa che ho detto che ci sarà un puntatore intero di nome x.
Ora ci chiediamo a che cosa lo facciamo puntare?
Ad una variabile che ha un indirizzo di memoria visto che il puntatore non viene salvato in memoria (ed ecco altro risparmio sulla memoria) e si fa nel seguente modo
(nome puntatore) = & (nome variabile)
ESEMPIO (int b) x= & b detto che b è intero x lo può puntare, facile no?
Ora credo che gradiate un esempio quindi eccolo qua:
1 int a=100, b=50 , *p;
(NOTATE CHE posso dichiarare variabili e puntatori assieme)
2 p= &a
(ORA p punta a d a variabile)
3 int c= *p
(ATTENTI con * posso anche dare ad una variabile il valore puntato dal puntatore così, quindi c = valore a = 100)
4 p = &b
(Cambio il posto su cui puntare)
5 int f = *p + 10
(f vale b+10 perchè p ORA punta b)
6 *p=*p+5
(ATTENTI così modifico p si ma anche b!!! Ora b vale 55!!!!)
7 int *q= &a
(SI può inizializzare e dichiarare assieme)
8 int d = *p * *q
(Provate e ricavare il valore di d o con la logica o scrivendo del codice di contorno che potete creare da soli)
Tutto qui.
Facile vero? Se volete sapere che fa 8 fatemelo sapere e io pubblico la soluzione....
Bene ultima stuzzicante possibilità: Sapere a che indirizzo sta la variabile puntata da b con qst riga di codice
printf("b=%d , indirizzo: %p\n", b, &b)
Sarà un numero esadecimale ovvero in base 16 e niente paura se viene "19BF" visto che oltre le cifre 1-9 ci sta A=10,B=11,C=12,D=13,E=14,F=15.
Bene per ora è veramente tutto alla prossima per sapere ancora dei puntatori.
Luca
Nessun commento:
Posta un commento