Przede wszystkim chciałbym powiedzieć, że wyczerpująco szukałem odpowiedzi na tym forum przed wysłaniem tego pytania, ale nie znalazłem żadnej odpowiedzi.Jak przekazać element członkowski struktury jako wskaźnik w funkcji
OK, problem polega na tym, że mam strukturę, która jest członkiem innej (głównej) struktury. Napisałem funkcję, aby wyczyścić pierwszą strukturę (pobiera wskaźnik do struktury). Chciałbym użyć tej funkcji do wyczyszczenia struct wewnątrz głównej struktury, ale nie wiem dokładnie, który jest prawidłowy sposób to zrobić.
Aby wyjaśnić to lepiej, tu jest jakiś kod:
Mam strukturę, zdefiniowana jako:
typedef struct
{
unsigned char next;
unsigned char first;
unsigned long data[TCP_RX_BUFFER+1];
}struct_circ_buff;
i funkcją, aby je wyczyścić:
void clearCircularBuffer(volatile struct_circ_buff *circular_buffer)
{
int i=0;
for(i=0;i<TCP_RX_BUFFER+1;i++)
circular_buffer->data[i]=0;
circular_buffer->first=0;
circular_buffer->next=0;
}
Potem mają inną strukturę, która zawiera struct_circ_buff:
typedef struct
{
volatile unsigned char sensorType;
volatile uint16_t sensorFlag;
volatile struct_circ_buff st_circular_buffer;
}struct_sens;
i chciałbym napisać funkcję, która wyczyściłaby tę strukturę, używając funkcji "clearCircularBuffer" zapisanej powyżej. Jak mogłem to zrobić?
void clear_sensors_struc (volatile struct_sens *sensors_struct)
{
sensors_struct->sensorFlag=0;
sensors_struct->tipoSensor=0;
//NOW, HOW CAN I USE clearCircularBuffer to clean sensors_struct->
//st_circular_buffer??
//this way compiles fine, but i don´t think it´s correct
clearCircularBuffer(&(sensors_struct->st_circular_buffer));
//this way wouldn´t even compile
clearCircularBuffer(sensors_struct->st_circular_buffer));
}
Wreszcie, mam zmienne zadeklarowane jako:
struct_sens struct_sensores[MAX_NUMBER_OF_SENSORS];
i chciałbym napisać funkcję, która będzie czysta, że tablicę struktur ... Więc jak mógłbym użyć „” clear_sensors_struc funkcja to zrobić?
void clear_sensors_struc_array(struct_sens *sensors_struct)
{
struct_sens aux_str[MAX_NUMBER_OF_SENSORS];
int i=0;
for(i=0;i<MAX_NUMBER_OF_SENSORS;i++)
{
clear_sensors_struc(&aux_str[i]);
*(sensors_struct+i)=aux_str[i];
}
}
Czy jest jakiś sposób robienia tego bez zdefiniowania wewnętrznego struct_sens aux_str?
Dobra, mam nadzieję, że ktoś może mi pomóc! Z góry dziękuję!
'// ten sposób zestawia w porządku, ale nie sądzę its correct' <- Dobrze, to _jest_ poprawne. –
Może to pomóc: http://stackoverflow.com/questions/6851848/passing-struct-pointer-to-functions-not-working – R3D3vil
Dlaczego nie zapisujesz wskaźnika (strcut_circle_buf *) w struct_sens zamiast struct_circle_buf. Wszystko idzie jasno. –