Puntatore di array

  • Roberto_c
  • Autore della discussione
  • Nuovo Utente
  • Nuovo Utente
Di più
13 Anni 5 Giorni fa #1 da Roberto_c
Puntatore di array è stato creato da Roberto_c
Buongiorno a tutti, ho un problema di programmazione sull'uso dei puntatori che mi sta assilando,non sono molto pratico, così provo a chiedere a voi.

La funzione è questa;

int Media(int Val_A, long *Somma_Medie, unsigned char *Counter, int *Media_Buff[])
{
*Somma_Medie += Val_A - *Media_Buff[*Counter];
*Media_Buff[*Counter] = Val_A;
++*Counter;
if (*Counter > N_Medie - 1)
*Counter = 0;

return (*Somma_Medie / N_Medie);

}


E la richiamo così:

AnalOUT[0] = Media(Analog[0], &Somma_Medie1, &Counter1, &Media_Buff1[0]);
AnalOUT[1] = Media(Analog[1], &Somma_Medie2, &Counter2, &Media_Buff2[0]);
AnalOUT[2] = Media(Analog[2], &Somma_Medie3, &Counter3, &Media_Buff3[0]);

La funzione si occupa di calcolare la media mobile degli ingressi analogici, il problema è che nell'array " Media_Buffer1", o 2 o 3 non vengono caricati i valori delle letture, sicuramente sbaglio qualcosa con i puntatori o gli indici.
Aiuto, please.
Ciao.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
13 Anni 5 Giorni fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Puntatore di array
Ciao Roberto,

da una prima lettura ti posso dire:

AnalOUT[0] = Media(Analog[0], &Somma_Medie1, &Counter1, &Media_Buff1[0]);

se vuoi passare l'indirizzo dell'array Media_Buff1 puoi anche scrivere:

AnalOUT[0] = Media(Analog[0], &Somma_Medie1, &Counter1, Media_Buff1);

per il valore di ritorno hai un int ma ritorni il risultato di una divisione:

return (*Somma_Medie / N_Medie);

anche se tra interi fai il casting manualmente.

Nella funzione incrementi Counter ma non hai il ciclo interno.
Perché incrementarla nella funzione?
Perché passare il puntatore all'array se poi fai uso di un solo valore?
Perché non passare subito il valore?

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Roberto_c
  • Autore della discussione
  • Nuovo Utente
  • Nuovo Utente
Di più
13 Anni 4 Giorni fa #3 da Roberto_c
Risposta da Roberto_c al topic Re: Puntatore di array
Ciao Mauro, direi che mi trovi d'accordo con le tue osservazioni, in effetti il contatore lo posso incrementare fuori dalla funzione, però a livello didattico, vorrei capire perchè questa ringa di codice non funziona

*Media_Buff[*Counter] = Val_A;

cioè non riesco a memorizzare i valori nell'array.
dove sbaglio???

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
13 Anni 4 Giorni fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Puntatore di array
Ciao,

sostituisci:
Code:
int Media(int Val_A, long *Somma_Medie, unsigned char *Counter, int *Media_Buff[])

con
Code:
int Media(int Val_A, long *Somma_Medie, unsigned char *Counter, int *Media_Buff)

cambia:
Code:
*Media_Buff[*Counter] = Val_A;

con
Code:
*Media_Buff += *Counter; *Media_Buff = Val_A;

per leggibilità cambia:
Code:
++*Counter;
con
Code:
*Counter++;

si capisce meglio che stai incrementando un puntatore.

ti sconsiglio di controllare entrambi gli esempi, quello tuo e i cambiamenti che ho suggerito, simulando il programma e vedere effettivamente quale puntatore non accetta. il valore corretto.

Assumo che le variabili passate alla funzione siano di tipo corretto e non avvenga alcun casting.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi