Voglia di Mac , anche su Facebook

Voglia di Mac , anche su Facebook
Diventa membro di iBlog anche su Facebook!
Powered By Blogger

Benvenuto in iBlog!

Benvenuto in iBlog , 

iBlog è un blog per interessi di  Mac OS X e anche iPhone OS ,  se se hai interessi da da condividere sul blog , scrivi un ' articolo e poi noi lo inseriremo su iBlog!

Pagine

martedì 10 agosto 2010

Avanzate di linguaggio C parte 2: Operazione sui puntatori

Bene rieccoci qua con il nostro linguaggio preferito ovvero il C!
Oggi parleremo di come sommare due puntatori anche se vi sa strano....ma cerchiamo di capire che cosa andremo a fare
Queste somme permettono di cambiare indirizzo a mio piacimento avendo un intero controllo sulla memoria!
Non vi sembra fantastica come idea! A me pare di si e ora vi insegno come fare:
Introduciamo prima di tutto l' operatore sizeof(T) ove T è un parametro noto.
Che fa? Semplice assegnatogli un parametro esso ne calcola la lunghezza dando un valore size_t che è un unsigned int ovvero un intero senza segno.
Ma a che serve questa cosa che ha poca utilità visto che uno sa che un parametro int occupa 4 bit di memoria il double 8 ecc...?
Semplice per capire di quanto si sposterà l' elemento visto che quando salvo un dato a differenza dei documenti sono salvati in bit contigui e non li spacca all interno della memoria.
Ora diamo le formule affinchè anche voi capiate quel che ho detto (attenzione NON sono esempi ma formule che spiegano cosa fa l' operazione sulla vostra memoria)
La somma si può fare fra un valore ( chiamiamolo x ) e un puntatore ( chiamiamolo p ) entrambi di dimensione size_t (NOTARE che devono essere uguali).
Ecco che succede se li sommo:
x+p = (indirizzo puntato da p)+ (size_t*x)
Capite che come si somma si sottrae o no?
Volete un ESEMPIO non è vero? Eccolo:
1 int a= 100, *b=&a;
2 int *c= b+5;
Dove è c? Credo che a nessuno verrà lo stesso risultato perche dipende dalla vostra memoria ma so che c è spostato di 20 bit da a.
Trucchetto se volete spostare solo di uno: è più furbo farlo con gli operatori ++ (incremento) e -- (decremento)
Ora passiamo alle somme che si possono fare fra 2 puntatori che chiamiamo per carenza di fantasia p e q (ATTENZIONE devono avere la stessa dimensione size_t)
Ecco che succede se li sommo:
p+q = (indirizzo puntato da p+indirizzo puntato da q) / size_t
Capite che come si somma si sottrae cambiando + con - anche nella formula.
Volete anche qui un ESEMPIO non è vero? Eccolo:

1 int a=100, b=200;
2 int p= &a , q=&b;
3 int *c= p-q
Dove è c? Credo che a nessuno verrà lo stesso risultato perche dipende dalla vostra memoria ma ora nn so nulla eccetto il fatto che dividerò la somma dei due indirizzi per 4.
Ecco per oggi è tutto e alla prossima lezione
Ciao
Luca


Nessun commento:

Posta un commento