Sei sulla pagina 1di 8

...tratto da https://www.codingcreativo.

it/passaggio-di-array-a-funzioni/

Il passaggio di un array in C, come parametro di una funzione, avviene sempre per indirizzo, difatti non è
possibile il passaggio di un array per valore.

Ricordiamo dunque che il nome di uno array è un puntatore costante.

Facciamo quindi alcuni esempi di prototipi di funzione, dove passiamo un array per indirizzo:

int f_max(int a[], int dim); //esempio di prototipo

possiamo scrivere anche:

int f_max(int *a, int dim);

I due metodi sono equivalenti.

Se definiamo una costante N, potremmo anche scrivere:

#define N 10

int f_max(int a[N], int dim); //esempio di prototipo

ESEMPIO DI PASSAGGIO DI ARRAY A FUNZIONI

Un esempio completo ...

Dichiariamo e definiamo due funzioni: f_max ed f_min, che calcolano rispettivamente l’elemento
massimo e l’elemento minimo di un array.

Ricordiamo che possiamo fare a meno dei prototipi di funzione (dichiarazione) se le funzioni sono definite
prima del main.

Ecco il listato d’esempio sul passaggio di array a funzioni in C.

#include <stdio.h>

#define N 10

int f_max(int a[], int n); //prototipo di funzione

int f_min(int a[], int n); //prototipo di funzione

main(){

int i, v[N], max, min;

//inserimento elementi

for (i<0;i<N;i++) {

printf("inserisci elemento %d: ", i+1);

scanf("%d", &v[i]);

}
//stampa elementi

for (i<0;i<N;i++)

printf("%d", v[i]);

max=f_max(v,N); //invocazione della funzione f_max

printf("\nil massimo e' %d", max); //stampa del massimo

min=f_min(v,N); //invocazione della funzione f_min

printf("\nil minimo e' %d", min); //stampa del minimo

int f_max(int a[], int n) { //definizione di funzione

int i, max;

max=a[0];

for (i=0;i<n;i++)

if (a[i]>max)

max=a[i];

return max;

int f_min(int a[], int n) { //definizione di funzione

int i, min;

min=a[0];

for (i=0;i<n;i++)

if (a[i]<min)

min=a[i];

return min;

---------------------------------------------------------

Altri esempi di passaggio di array a funzioni, al fine di consolidare l’argomento.

PRIMO ESEMPIO DI PASSAGGIO DI ARRAY A FUNZIONI

Realizziamo un semplice programma che sviluppi due funzioni: insert che permette di inserire i dati in un
array e print che invece permette di stampare i dati di un array.
In questo esempio non utilizzeremo i prototipi, ma inseriremo prima le definizioni delle funzioni insert e
print, semplicemente per proporre una modalità differente da quella precedente.

La prima funzione che definiremo è dunque insert che con un semplice ciclo for permetterà
l’inserimento di tutti gli elementi di un vettore v[] che è stato passato per indirizzo alla funzione.

Allo stesso modo costruiamo la funzione print.

Nel main invochiamo semplicemente le nostre funzioni.

Ecco il listato completo dell’esempio di passaggio di array a funzioni.

#include <stdio.h>

#define N 10

void insert(int v[]) {

int i;

for (i<0;i<N;i++) {

printf("inserisci elemento %d: ", i+1);

scanf("%d", &v[i]);

void print(int v[]) {

int i;

for (i=0; i<N; i++)

printf("%d\t", v[i]);

int main() {

int a[N];

insert(a);

print(a);

return 0;

SECONDO ESEMPIO DI PASSAGGIO DI ARRAY A FUNZIONI

Proviamo a variare l’esercizio precedente chiedendo quanti elementi inserire in un vettore.


Inoltre utilizziamo int *v, al posto di int v[] che come dicevamo nella precedente lezione sono due
metodi equivalenti.

Sviluppiamo quindi la nostra funzione insert che questa volta, al contrario di prima, ci dovrà ritornare il
numero degli elementi inseriti (n). Facciamo anche un controllo dell’input su quanti elementi inserire
nell’array.

La funzione print avrà come parametri formali l’array passato per indirizzo e il numero degli elementi (n).

#include <stdio.h>

#define N 100

int insert(int *v) { //è uguale a int v[]

int i, n;

do {

printf("Quanti elementi?");

scanf("%d", &n);

} while (n<0 || n>N);

for (i<0;i<n;i++) {

printf("inserisci elemento %d: ", i+1);

scanf("%d", &v[i]);

return n;

void print(int *v, int n) {

int i;

for (i=0; i<n; i++)

printf("%d\t", v[i]);

int main() {

int a[N], n;
n=insert(a);

/*attenzione chiaramente cambia anche l'invocazione della funzione,


insert infatti restituisce un intero, il numero degli elementi*/

print(a, n);

return 0;

-----------------------------------

Creiamo altri esempi di funzioni che generano array random in C.

Sviluppare un programma che genera e visualizza due array random tramite l’uso di funzioni. Dunque
creare una funzione che generi i due array e una funzione che li visualizzi.

Quindi iniziamo creando la nostra funzione random_array, che riceve un array passato per indirizzo. Questa
funzione genera un array di numeri random compresi tra 1 e 10 e restituisce un intero, il numero degli
elementi.

Dopo creiamo la funzione print che stampa un array. Questa funzione ha come parametri formali la
dimensione dell’array e l’array passato per indirizzo e non restituisce nulla.

Successivamente nel main dichiariamo i due vettori a e b e le due dimensioni n1 ed n2. Dopo invochiamo le
funzioni random_array e print.

Ecco dunque il listato completo di array random con le funzioni in C.

#include <stdio.h>

#include <time.h>

#define N 10

int random_array(int *v1) {

int i, n;

srand((unsigned) time(NULL));

do {

printf("Quanti elementi?: ");

scanf("%d", &n);

} while (n<0 || n>N);

for (i=0; i<n; i++)

v1[i] = rand()%10+1;

return n;
}

void stampa_array(int n, int v[]) {

int i;

for (i=0; i<n; i++) {

printf("%d\n", v[i]);

int main(void) {

int n1, n2, a[N], b[N];

n1 = random_array(a);

stampa_array(n1, a);

printf("\n");

n2 = random_array(b);

stampa_array(n2, b);

return 0;

SECONDO ESEMPIO DI ARRAY RANDOM CON LE FUNZIONI IN C

Realizziamo un secondo esempio, sempre con i numeri random.

Sviluppare un programma che genera e visualizza due array random tramite l’uso di funzioni. Sommare i
due array e visualizzare un nuovo array che contiene la somma di ciascun elemento.

In pratica dati due array ad esempio a[5] e b[5], l’array c[5] sarà così composto:

c[0]=a[0]+b[0]; e così via.

Creiamo dunque una funzione sum che prende come parametri formali i due array passati per indirizzo. La
funzione è molto semplice da implementare, infatti con un semplice ciclo si sommano gli elementi: c[i] = a[i]
+ b[i].

#include <stdio.h>

#include <time.h>

#define N 10

void random_array(int *v) {


int i;

srand((unsigned) time(NULL));

for (i=0; i<N; i++)

v[i] = rand()%10+1;

void *sum(int *a, int *b){

int i, *c;

for(i=0; i<N; i++) {

c[i] = a[i] + b[i]; //somma gli elementi dei due vettori

printf("%d\t", c[i]);

void stampa_array(int *v) {

int i;

for (i=0; i<N; i++) {

printf("%d\t", v[i]);

int main(void) {

int i, a[N], b[N];

char invio;

printf("\nGenero il primo array: ");

random_array(a);

stampa_array(a);

printf("\n\nInvio per generare il secondo array");

scanf("%c", &invio);

printf("\nGenero il secondo array: ");

random_array(b);
stampa_array(b);

printf("\n\nLa somma dei due array: ");

sum(a,b);

return 0;

Potrebbero piacerti anche