如何将struct成员作为函数中的指针传递

首先,我想说在发布这个问题之前我已经在这个论坛上详尽地搜索了答案,但我没有找到任何答案。

好吧,问题是我有一个结构是另一个(主要)结构的成员。 我写了一个函数来清除第一个结构(它需要一个指向struct的指针)。 我想使用该函数来清除主结构中的结构,但我不确切知道哪种方法是正确的。

为了更好地解释它,这里是一些代码:

我有一个结构,定义为:

typedef struct { unsigned char next; unsigned char first; unsigned long data[TCP_RX_BUFFER+1]; }struct_circ_buff; 

以及清除它的function:

 void clearCircularBuffer(volatile struct_circ_buff *circular_buffer) { int i=0; for(i=0;idata[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) :是指向struct sensors_struct的成员st_circular_buffer的指针,它恰好是struct struct_circ_buff

由于函数clearCircularBuffer需要一个指针,它将编译并正常工作。

关于清理结构数组的function,这个怎么样?:

 void clear_sensors_struc_array(struct_sens *sensors_struct) { int i=0; for(i=0;i 

在Nicolas中,例如clearCircularBuffer(&(sensors_struct-> st_circular_buffer));

我们可以直接使用

clearCircularBuffer(sensors_struct-> st_circular_buffer);

– >优先于&

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;ist_circular_buffer.data[i]=0; } }