C 如何在函数中将结构成员作为指针传递?
问题是我有一个结构是另一个(主要)结构的成员。我编写了一个函数来清除第一个结构(它使用指向结构的指针) 我想用这个函数来清除主结构中的结构,但我不知道哪种方法是正确的 为了更好地解释它,下面是一些代码: 我有一个结构,定义为:C 如何在函数中将结构成员作为指针传递?,c,C,问题是我有一个结构是另一个(主要)结构的成员。我编写了一个函数来清除第一个结构(它使用指向结构的指针) 我想用这个函数来清除主结构中的结构,但我不知道哪种方法是正确的 为了更好地解释它,下面是一些代码: 我有一个结构,定义为: typedef struct { unsigned char next; unsigned char first; unsigned long data[TCP_RX_BUFFER+1]; }struct_circ_buff; 和一个清除它的函
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;
}
我想用上面写的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];
我想写一个函数来清理这个数组的结构
那么,我如何使用清除传感器结构功能来实现这一点呢
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];
}
}
无效清除传感器结构阵列(结构传感器*传感器结构)
{
结构传感器辅助传感器[传感器的最大数量];
int i=0;
对于(i=0;i在功能清除传感器结构内,确实正确的做法是:
//this way compiles fine, but i don´t think it´s correct
clearCircularBuffer(&(sensors_struct->st_circular_buffer));
这是正确的,因为(内部功能clear\u sensors\u struc
):
sensors\u struct
:是指向结构的指针
sensors\u struct->st\u circular\u buffer
:取消引用sensors\u struct
(使用->
),并允许您访问其成员st\u circular\u buffer
&(sensors\u struct->st\u circular\u buffer)
:指向结构sensors\u struct
的成员st\u circular\u buffer
,该成员恰好是结构结构的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));
}
}
无效清除传感器结构阵列(结构传感器*传感器结构)
{
int i=0;
对于(i=0;i
首先,您没有正确定义结构。请按以下方式定义结构:
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;
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;
}
}
你问:
我想用上面写的clearCircularBuffer
函数编写一个清理这个结构的函数。我该怎么做`
您可以按以下方式进行操作:
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;
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;
}
}
void clear\u sensors\u struct(易失性结构*传感器结构)
{
int i;
传感器结构->传感器标志=0;
传感器结构->传感器类型=0;
传感器结构->st\U循环缓冲区。下一步=0;
传感器结构->st\U循环缓冲区。第一个=0;
对于(i=0;ist\u循环\u buffer.data[i]=0;
}
}
根据尼古拉斯的例子:
clearCircularBuffer(&(sensors_struct->st_circular_buffer));
我们可以直接使用
clearCircularBuffer(&sensors_struct->st_circular_buffer);
因为->
优先于&
//这种方式编译起来很好,但我认为它不正确
这可能会有帮助:为什么不保存(struct\u circle\u buf*)指针指向结构而不是圆形。事情很清楚。@DanielFischer,谢谢你的阅读和回答!Nisarg:谢谢!我已经看到了那篇文章,我从中得到了一些积极的东西,但我的情况略有不同。李东国:谢谢你的建议;我将分析它。非常感谢你Nicolas f或者解释!这是清理struct_sens数组的一种好方法,但在本例中,我想充分利用“clearCircularBuffer”函数。当然,我可以像你说的那样做,但问题基本上是关于结构和指针处理的。