// massimoFunzionale3.c
// ESERCIZIO: passaggio parametri per indirizzo
// Una procedura puo' cambiare delle celle FUORI da essa
// se gli si passa l'INDIRIZZO DELLA VARIABILE

#include <stdio.h>
#include <stdlib.h>
#define	LUN 3

int main()
{
	int	num;	// dichiarazione delle variabili
	int	i;
	int	massimo;
	int	numeri[LUN];
	void calcolaMassimo(int numeri[], int * DammiIndirizzoDelMassimo); 
	// Questa e' una PROCEDURA !!!
	
	
	// solita immisione di un array
	for (i = 0; i < LUN; i = i + 1)
	{
		scanf("%d", &num);
		numeri[i] = num;
	}


	calcolaMassimo(numeri, & massimo);  // qui spariscono i tipi di dati !
	printf("massimo=%d\n", massimo);

	getchar(); getchar(); // non serve a nulla ma ferma la finestra...
	exit(0);
}

void calcolaMassimo(int numeri[], int * DammiIndirizzoDelMassimo)
{
	int massimoLocale;
	int i;  // vedo solo le varibili che vengono passate 
			//e quelle dichiarate 
			// quindi vedo e uso "massimo" e "i"
			// l'indirizzo dove inizia l'array "numeri" passato
			// 

	massimoLocale = numeri[0];	
    for (i = 0; i < LUN; i = i + 1)
    {
		if (massimoLocale < numeri[i])
		{
			massimoLocale = numeri[i];
        }
    }
    *DammiIndirizzoDelMassimo= massimoLocale;
    // il valore della variabile LOCALE "massimoLocale" (che andrebbe persa 
    // due righe sotto, alla chiusura della procedura) viene 
    // copiato nella cella di indirizzo "DammiIndirizzoDelMassimo".
    // "DammiIndirizzoDelMassimo" contiene infatti l'indirizzo (esterno
    // alla memoria che puo' vedere la procedura) della variabile massimo
    // infatti chiamammo nel main: "calcolaMassimo(numeri, &massimo);"
}

