• Non ci sono risultati.

Dispensa II.8

N/A
N/A
Protected

Academic year: 2021

Condividi "Dispensa II.8"

Copied!
3
0
0

Testo completo

(1)

Dispensa di Informatica – II.8

Dispensa II.8 versione 1.0 mail: lamonica@associatesonline.it Pagina 1 di 3

ARITMETICA DEI PUNTATORI

La dispensa di seguito proposta si pone come tutorial per poter porre le basi per la gestione di puntatori nel linguaggio C / C ++

Incremento dei puntatori

Il C consente di eseguire operazioni di somma e sottrazione su puntatori.

Supponendo che p e a forniscano l’indirizzo di memoria di elementi dello stesso tipo, p+i e a+i forniscono l’indirizzo di memoria dell’i-esimo elemento successivo di quel tipo (e non della locazione di memoria successiva !!!!)

Supponendo i una variabile intera:

la notazione a[i] è equivalente *(a+i);

supponendo p una variabile puntatore ad un intero (ad esempio tramite dichiaerazione int *p)

la notazione p = a è equivalente p = &a[0];

la notazione p = a+1 è equivalente a p = &a[1];

mentre non sono ammessi degli assegnamenti del tipo

a = p;

a = a +1;

(NON E’ POSSIBILE REDIRIGERE A CHE E’ IL PUNTATORE DEL PRIMO ELEMENTO DI UN ARRAY)

(2)

Dispensa di Informatica – II.8

Dispensa II.8 versione 1.0 mail: lamonica@associatesonline.it Pagina 2 di 3

Le stringhe

Si definisce stringa un array di char il cui ultimo elemento è il simbolo ‘\0’.

Supponiamo di dover misurare la lunghezza di una stringa.

/*algoritmo ERRATO per misurare la lunghezza di una stringa*/

char *stringa = “Il sale della vita”;

int len=0;

while( stringa++ != ‘\0’) // Errore!! STRINGA E’ IL PUNTATORE ++len;

printf(“Lunghezza stringa st=%d\n”,len);

/* algoritmo ERRATO per misurare la lunghezza di una stringa */

char *stringa = “Il sale della vita”;

int len=0;

while( *stringa++ != ‘\0’) // Errore!! NON POSSO MODIFICARE IL PUNTATORE stringa ++len;

printf(“Lunghezza stringa st=%d\n”,len);

/* algoritmo CORRETTO per misurare la lunghezza di una stringa */

char *stringa = “Il sale della vita”;

char *p;

int len=0;

p = stringa; // inizializzo p a puntare il primo elemento !!!

while( * p++ != ‘\0’) // Corretto !!!

++len;

printf(“Lunghezza stringa st=%d\n”,len);

(3)

Dispensa di Informatica – II.8

Dispensa II.8 versione 1.0 mail: lamonica@associatesonline.it Pagina 3 di 3

Operazioni con i puntatori

Supponendo che p e a forniscano l’indirizzo di memoria di elementi dello stesso tipo, ad esempio puntano a due diversi elementi di un array,

allora p–q restituisce un valore intero pari al numero di elementi esistenti tra l’elemento cui punta p e l’elemento cui punta q e NON LA DIFFERENZA TRA IL VALORE DEI PUNTATORI (INDIRIZZI) !!!!!!

Ad esempio Supponendo che il risultato di p–q sia pari a 3 e supponendo che ogni elemento dell’array sia memorizzato in 4 byte (un word in inglese, una parola in italiano) , allora la differenza tra l’indirizzo contenuto in p e l’indirizzo contenuto in q darebbe 12.

Riferimenti

Documenti correlati

*point: prezzi come indici di scarsità (Hayek)..

- se valgono convessità delle preferenze e ottimo interno, la tangenza è necessaria e sufficiente per ottimo, - se vale solo convessità potremmo avere un ottimo di frontiera

[r]

[r]

[r]

[r]

I: il valore di ciascun elemento dello array di numeri interi Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array.. U: lo array

I: riempimento; il valore di ciascun elemento dello array Pi: il numero degli elementi da inserire (riempimento) non può essere maggiore della cardinalità dell’array.. U: