首先,我想说在发布这个问题之前,我已经在这个论坛上详尽地搜索了答案,但我没有找到任何答案。
好的,问题是我的结构是另一个(主要)结构的成员。我写了一个函数来清除第一个结构(它需要一个指向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?
的情况下这样做 好的,希望有人可以帮助我! 提前谢谢!答案 0 :(得分:3)
在函数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)
:是指向结构st_circular_buffer
的成员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));
}
}
答案 1 :(得分:1)
在Nicolas中,例如clearCircularBuffer(&amp;(sensors_struct-&gt; st_circular_buffer));
我们可以直接使用
clearCircularBuffer(安培; sensors_struct-&GT; st_circular_buffer);
- &GT;优先于&amp;
答案 2 :(得分:0)
1)首先,您没有正确定义结构。定义结构如下
typedef struct one
{
unsigned char next;
unsigned char first;
unsigned long data[11];
}struct_circ_buff;
typedef struct two
{
volatile unsigned char sensorType;
volatile int sensorFlag;
volatile struct_circ_buff st_circular_buffer;
}struct_sens;
2)你问了
I would like to write a function that would clean this struct, using the 'clearCircularBuffer' function written above. How could I do that?
您可以按照以下方式执行此操作
void clear_sensors_struc (volatile struct_sens *sensors_struct)
{
int i;
sensors_struct->sensorFlag=0;
sensors_struct->sensorType=0;
sensors_struct->st_circular_buffer.next=0;
sensors_struct->st_circular_buffer.first=0;
for(i=0;i<TCP_RX_BUFFER+1;i++)
{
sensors_struct->st_circular_buffer.data[i]=0;
}
}