#include void print1(int a[], int n){ int k; for(k=0; k 01100010 (= 98 = 'b') 01100001 (= 97 = 'a') 00000000 00000000 v+1 ----> 01100010 (= 98 = 'b') 01110101 (= 117 = 'u') 00000000 00000000 La funzione print1() stampa v[0] e v[1] nel modo corretto in quanto, avendo il parametro a tipo int*, a[0] coincide con v[0] e a[1] con v[1] Nella funzione print2() il parametro a ha tipo char* Quindi: a[0] = *(a+0) coincide con il primo byte dell'array a[1] = *(a+1) coincide con il secondo byte dell'array ... Segue che print2(v, 2); stampa i primi due byte dell'array (interpretando ogni byte come intero) print2(v, 8); stampa i primi quattro byte dell'array Un discorso analogo vale per print3(), dove i byte dell'array sono interpretati come caratteri NOTE ==== 1) Per eliminare i warning, occorre forzare un cast a char* dove richiesto: print2( (char *)v, 2); print3( (char *)v, 2); Il comportamento pero' non cambia. 2) Il programma si comporta in modo differente se il sistema non utilizza la rappresentazione descritta 3) Notare che 24930 = 'b' * pow(2,8) + 'a' 30050 = 'b' * pow(2,8) + 'u' Si ricordi che la rappresentazione in base 2 di n * pow(2,k) si ottiene aggiungendo k zeri alla rappresentazione in base 2 di n */