如何将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)
:是指向structsensors_struct
的成员st_circular_buffer
的指针,它恰好是structstruct_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; } }