【发布时间】:2013-07-29 15:32:57
【问题描述】:
问题是我有一个结构是另一个(主要)结构的成员。我写了一个函数来清除第一个结构(它需要一个指向结构的指针)。
我想使用该函数来清除主要结构中的结构,但我不知道究竟哪种方法是正确的。
为了更好的解释,这里有一些代码:
我有一个结构,定义为:
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 的情况下做到这一点?
【问题讨论】:
-
//this way compiles fine, but i don´t think it´s correct是正确的。 -
为什么不在 struct_sens 中保存 (strcut_circle_buf *) 指针而不是 struct_circle_buf 。事情变得清晰了。
-
@DanielFischer,感谢您的阅读和回答!尼萨尔:谢谢!我已经看过那个帖子,我从中得到了一些积极的东西,但我的情况略有不同。郭立冬:谢谢你的建议;我来分析一下。
标签: c