Introduzione corso Arduino.pdf


Preview of PDF document introduzione-corso-arduino.pdf

Page 1 2 3 4 5 6 7 8 9 10 11

Text preview


Introduzione corso Arduino – Array, Puntatori, Funzioni e Struct
A volte è poi necessario che una funzione ritorni più di un valore. In questo caso possiamo passare come parametri i
puntatori alle variabile in cui salvare i valori. Prendiamo come esempio la funzione che calcoli le soluzione di una
equazione di 2° grado:
void eq2(int a, int b, int c, float* x1, float* x2);
int main(){
float x1, x2;
eq2(1, 4, 6, &x1, &x2);
}
void eq2(int a, int b, int c, float* x1, float* x2){
float delta = b*b – 4 * a * c;
*x1 = (-b + sqrt(delta)) / 2 * a;
*x2 = (-b - sqrt(delta)) / 2 * a;
}
Nel main, utilizzando l’operatore &, otteniamo i puntatori delle variabile x1 e x2 e le passiamo come parametri alla
funzione.
Nella funzione, utilizzando l’operatore * sui puntatori passati, riusciamo a modificare i valori presenti agli indirizzi.
Facendo così le variabili vengono modificate anche nel main. Più in generale è utile passare variabili attraverso il loro
puntatore quando il loro valore deve essere modificato all’interno della funzione e questa modifica deve essere
mantenuta anche nel main.
Come detto precedentemente, una variabile-vettore non è altro che un puntatore al primo elemento dell’array,
quindi per passare un vettore ad una funzione basta mettere come paramente un puntatore dello stesso tipo
dell’array.
Esempi:
int cerca(int* arr, int dim, int x);
void elimina(int* arr, int* dim, int pos);
void scambio(int* a, int* b);
//essendo scambio usato in ordina deve essere dichiarato prima di ordina
void ordina(int* arr, int dim);
int main(){
int a[10];
int dim = 6;
int i = cerca(a, dim, 3);
elimina(a, &dim, 4);
ordina(a, dim);
}

//non bisogna mettere & davanti ad a perchè è già un puntatore
//dovendo modificare dim passo il suo puntatore

int cerca(int* arr, int dim, int x){
int i = 0;
while(i<dim && arr[i] != x) i++;
if(i<dim) return i;
return -1;
}
void elimina(int* arr, int* dim, int pos){
for(int i = pos; i<*dim; i++){
Realizzato da Davide Malvezzi