首先,我想說在發佈這個問題之前,我已經詳盡地在這個論壇中搜索了答案,但是我沒有找到任何答案。如何在函數中傳遞一個結構成員作爲指針
好的,問題是我有一個結構是另一個(主要)結構的成員。我寫了一個清除第一個結構的函數(它需要一個指向struct的指針)。 我想使用該函數來清除主要結構中的結構,但我不確切知道哪種方法是正確的。
爲了更好地解釋它,這裏是一些代碼:
我有一個結構,定義爲:
typedef struct
{
unsigned char next;
unsigned char first;
unsigned long data[TCP_RX_BUFFER+1];
}struct_circ_buff;
和功能來清除它:
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;
}
然後,我有另一個包含struct_circ_buff的結構:
typedef struct
{
volatile unsigned char sensorType;
volatile uint16_t sensorFlag;
volatile struct_circ_buff st_circular_buffer;
}struct_sens;
我想寫一個函數來清理這個結構,使用上面寫的'clearCircularBuffer'函數。我怎麼能這樣做?
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));
}
最後,我有一個變量聲明爲:
struct_sens struct_sensores[MAX_NUMBER_OF_SENSORS];
,我想編寫一個將清潔結構進行陣列功能... 所以我怎麼可能用「clear_sensors_struc」函數做到這一點?
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];
}
}
有沒有辦法做到這一點,沒有定義內部struct_sens aux_str?
好的,希望有人能幫助我! 在此先感謝!
'//這樣編譯好,但我不認爲it's correct' < - 嗯,這_is_正確的。 –
這可能有所幫助:http://stackoverflow.com/questions/6851848/passing-struct-pointer-to-functions-not-working – R3D3vil
爲什麼不保存一個(strcut_circle_buf *)指針在struct_sens而不是struct_circle_buf中。事情很清楚。 –