Sei sulla pagina 1di 8

Laboratorio di Programmazione 1

Docente: dr Damiano Macedonio Lezione 13 23/01/2014

Funzioni e Array

Oltre a variabili di tipo primitivo e valori, possibile passare come argomento di una funzione il valore di un elemento di un array, oppure un intero array. Un elemento di unarray con tipo base primitivo trattato come una qualsiasi variabile di tipo primitivo: il suo valore copiato allinterno del parametro formale. l passaggio di unarray come argomento di una funzione !a un funzionamento diverso.

Funzioni e Array: "ic!iarazione

"ic!iarazione di una funzione c!e !a un parametro di tipo array:


int

minimum (int values[]);

#on necessario indicare nella dic!iarazione della funzione la dimensione dellarray: il compilatore ignora questa informazione. $er far funzionare la funzione con array di dimensione diversa possibile aggiungere un parametro c!e contiene tale informazione:
int

minimum (int values[], int size);

Funzioni e Array: %omportamento

&uando viene passato un array come argomento di una funzione, la funzione riceve l'indirizzo di memoria in cui si trova larray. (iferendosi a tale indirizzo, la funzione !a accesso proprio all'array originale. Se una funzione che riceve un array come argomento, cambia il valore di un elemento di tale array, tale modifica viene apportata allarray originale che stato passato alla funzione.

Funzioni e Array: %omportamento


int sum (int a, int b); int main (void) { ... s = sum(x, y); ... } l valore delle variabili x e y passate come argomenti sono copiati nei parametri formali a e b. &ualsiasi modi)ca fatta ad a e b non !a e*etto su x e y. &uesto vale anc!e se al posto di x e y si usano due elementi di un array:
s = sum(a[0], a[1]);

Funzioni e Array: %omportamento


int sum (int x[]) { x[2] = x[0] + x[1]; } int main(void) { int a[ ] = {!, ", sum (a); ... }

};

+' indirizzo della memoria contenente larray a copiato nel parametro formale x. &ualsiasi modi)ca fatta al contenuto di tale locazione di memoria dalla funzione sum persiste anc!e dopo la terminazione di tale funzione.

Funzioni e Array ,ultidimensionali

Analogamente a quanto accade per gli array monodimensionali, possibile:


$assare

un elemento di un array multidimensionale ad una funzione.


-i comporta come una qualsiasi variabile .semplice/.

$assare

un array multidimensionale ad una funzione.


%ome per gli array monodimensionali, qualsiasi modi)ca apportata al contenuto dellarray !a e*etto anc!e dopo lesecuzione della funzione.

Funzioni e Array ,ultidimensionali: "ic!iarazione

#ella dic!iarazione di una funzione c!e !a come argomento un array bi0dimensionale possibile omettere nella dic!iarazione numero di rig!e, ma non il numero di colonne:
int int int int

sum(int sum(int sum(int sum(int

a##ay$values[10][%]) 1A+ "O a##ay$values[][%]) 1A+ "O a##ay$values[10][]) #O# 1A+ "O a##ay$values[][]) #O# 1A+ "O

int a##ay$values[10][%]: un array di 23 elementi ciascuno

dei quali !a tipo array di 4 elementi interi. int a##ay$values[][%]: un array di x elementi ciascuno dei quali !a tipo array di 4 elementi interi. int a##ay$values[10][]: un array di 23 elementi ciascuno dei quali !a un tipo non noto5

l compilatore deve sapere il tipo degli elementi per garantire la corretta invocazione delle funzioni5

Potrebbero piacerti anche