Trước hết, tôi muốn nói rằng tôi đã tìm kiếm câu trả lời trong diễn đàn này trước khi đăng câu hỏi này, nhưng tôi không tìm thấy câu trả lời nào.Làm thế nào để vượt qua một thành viên cấu trúc như một con trỏ trong một hàm
OK, vấn đề là tôi có cấu trúc là thành viên của cấu trúc (chính) khác. Tôi đã viết một hàm để xóa cấu trúc đầu tiên (phải mất một con trỏ đến cấu trúc). Tôi muốn sử dụng chức năng đó để xóa cấu trúc bên trong cấu trúc chính, nhưng tôi không biết chính xác đó là cách chính xác để làm điều đó.
Để giải thích nó tốt hơn, đây là một số mã:
Tôi đã một cấu trúc, định nghĩa là:
typedef struct
{
unsigned char next;
unsigned char first;
unsigned long data[TCP_RX_BUFFER+1];
}struct_circ_buff;
và một chức năng để xóa nó:
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;
}
Sau đó, tôi có cấu trúc khác bao gồm struct_circ_buff:
typedef struct
{
volatile unsigned char sensorType;
volatile uint16_t sensorFlag;
volatile struct_circ_buff st_circular_buffer;
}struct_sens;
và tôi muốn viết một hàm có thể làm sạch cấu trúc này, sử dụng hàm 'clearCircularBuffer' được viết ở trên. Làm thế nào tôi có thể làm điều đó?
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));
}
Cuối cùng, tôi đã một biến khai báo là:
struct_sens struct_sensores[MAX_NUMBER_OF_SENSORS];
và tôi muốn viết một hàm có thể làm sạch được mảng các cấu trúc ... Vậy làm thế nào tôi có thể sử dụng 'clear_sensors_struc' chức năng để làm điều đó?
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];
}
}
Có cách nào để làm điều đó mà không xác định cấu trúc bên trong aux_str?
OK, hy vọng ai đó có thể giúp tôi! Cảm ơn bạn trước!
'// cách này biên dịch tốt, nhưng tôi không nghĩ Nó rất correct' <- Vâng, nó _is_ đúng. –
Điều này có thể giúp: http://stackoverflow.com/questions/6851848/passing-struct-pointer-to-functions-not-working – R3D3vil
Tại sao bạn không lưu con trỏ (strcut_circle_buf *) trong struct_sens thay vì struct_circle_buf. Mọi thứ trở nên rõ ràng. –