Ominide 7993 punti

Array e funzioni


Non è possibile avere un tipo di dato array come valore di ritorno di una funzione, però gli array possono essere argomenti della funzione, è necessario però prestare attenzione poichè se come argomento viene solo inserito l’array, il riferimento è solo alla prima cella dell’array e non al contenuto intero dell’array, infatti se si applica sizeof() ad un array il risultato equivale alla dimensione di una variabile puntatore.
La soluzione a questo problema è aggiungere un altro argomento che indichi la dimensione dell’array.
Se nelle funzioni uno degli argomenti e un array multidimensionale, è opzionale specificare la prima funzione ma è obbligatorio specificare quelle successive, poichè il compilatore deve calcolare in modo corretto gli indirizzi di memoria dei vari elementi, ovvero l’offset delle righe dell’array. Però, poichè C non è un linguaggio troppo rigido, è possibile invocare una funzione anche con array di dimensioni non compatibili, avvisando con un warning, che potrebbero portare a comportamenti non definiti.
Il passaggio del tipo di dato array come indirizzo è conveniente perchè:
- una funzione può operare su array molto grandi senza avere l’overhead per fare una copia dell’array
- è possibile gestire array di grandi dimensioni in modo efficiente
- è meglio evitare funzioni con argomento strutture di array ingombranti, poichè c’è il passaggio per valore
Le funzioni con array come parametri formali o variabili locali sono potenzialmente insicure, poichè potrebbero causare problemi di buffer overflow, e in questo caso C non fornisce protezioni, questi problemi vengono sfruttati per tecniche di attacco.
Gestire array multidimensionali come parametri di funzione è scomodo e ha limiti, poichè non c’è modo di gestire array multidimensionali con dimensioni generiche, in questo caso si può usare la memoria dinamica.
Hai bisogno di aiuto in Informatica?
Trova il tuo insegnante su Skuola.net | Ripetizioni
Potrebbe Interessarti
×
Registrati via email