问题是我有一个结构是另一个(主要)结构的成员。我编写了一个函数来清除第一个结构(它需要一个指向结构的指针)。
我想使用该函数清除主结构中的结构,但我不确切知道哪种方法是正确的。
为了更好地解释它,下面是一些代码:
我有一个结构,定义为:
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的方法?
在函数内部clear_sensors_struc
,这样做确实是正确的:
//this way compiles fine, but i don´t think it´s correct
clearCircularBuffer(&(sensors_struct->st_circular_buffer));
没错,因为(内部函数clear_sensors_struc
):
sensors_struct
:是指向结构的指针。sensors_struct->st_circular_buffer
:取消引用sensors_struct
(使用->
),并允许您访问其成员st_circular_buffer
。&(sensors_struct->st_circular_buffer)
:是指向恰好是structst_circular_buffer
的struct成员的指针。sensors_struct
struct_circ_buff
由于该函数clearCircularBuffer
需要一个指针,因此它将正确编译并正常工作。
关于清理结构体数组的功能,那呢?
void clear_sensors_struc_array(struct_sens *sensors_struct)
{
int i=0;
for(i=0;i<MAX_NUMBER_OF_SENSORS;i++)
{
clear_sensors_struc((sensors_struct+i));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句